Tox не может скопировать не Python файл при установке модуля

Это древовидная структура модуля, который я пишу setup.py файл для:

ls .

LICENSE
README.md
bin
examples
module
scratch
setup.py
tests
tox.ini

Я настроил свой setup.py следующее:

from setuptools import setup, find_packages

setup(
    name="package_name",
    version="0.1",
    packages=find_packages(),

    install_requires=[
        # [...]
    ],

    extras_require={
        # [...]

    },

    tests_require={
        'pytest',
        'doctest'
    },

    scripts=['bin/bootstrap'],

     data_files=[
        ('license', ['LICENSE']),
     ],

    # [...]
    # could also include long_description, download_url, classifiers, etc.
)

Если я установлю пакет из среды Python (также virtualenv)

pip install .

LICENSE файл правильно установлен.

Но работает tox:

[tox]
envlist = py27, py35

[testenv]
deps = 
    pytest
    git+https://github.com/djc/couchdb-python
    docopt

commands = py.test \
    {posargs}

Я получаю эту ошибку:

running install_data
  creating build/bdist.macosx-10.11-x86_64/wheel/leafline-0.1.data
  creating build/bdist.macosx-10.11-x86_64/wheel/leafline-0.1.data/data
  creating build/bdist.macosx-10.11-x86_64/wheel/leafline-0.1.data/data/license
  error: can't copy 'LICENSE': doesn't exist or not a regular file

Удаление data_files часть из setup.py делает tox работает правильно.

2 ответа

Ваша проблема здесь в том, что setuptools не может найти файл 'LICENSE' в файлах, которые были включены для построения исходного дистрибутива. У вас есть 2 варианта, чтобы указать setuptools включить этот файл (оба были указаны здесь):

С помощью MANIFEST.in часто проще и легче проверить из-за https://pypi.org/project/check-manifest/, что позволяет использовать автоматизацию для проверки того, что все действительно правильно (если вы используете VCS, такой как Git или SVN).


pip install . строит колесо, используя python setup.py bdist_wheel который устанавливается путем простой распаковки, как определено в спецификации колес: https://www.python.org/dev/peps/pep-0427/

tox создает исходный дистрибутив, используя python setup.py sdist, который затем распаковывается и устанавливается с помощью python setup.py install,

Это может быть причиной разницы в поведении для вас.

У меня есть несколько файлов ресурсов внутри моих пакетов, которые я использую во время выполнения. Чтобы сделать настройку хранить их в пакете с кодом Python, я использую include_package_data=True и я получаю к ним доступ, используя importlib.resources, Вы можете использовать backport для более старой версии Python, чем 3.7 или другой библиотеки.

Перед каждым выпуском у меня есть скрипт, который проверяет, что все нужные мне файлы находятся внутри bdist руль, чтобы быть уверенным, что все на месте.

Другие вопросы по тегам