Подтвердить что ты не робот

Как заставить "setup.py test" устанавливать зависимости в "virtualenv"?

В крестовый поход, чтобы сделать мое приложение pip -installable, я сражаюсь с большими боями с setuptools и distribute. Я полагаю, что мои зависимости правильные, т.е. Установка с помощью pip install myapp должна, вероятно, правильно заполнять виртуальную среду. Тем не менее, я хотел бы оптимизировать разработку, пока я нахожусь в ней, поэтому моя цель - начать с пустого virtualenv и сделать setup.py test (и позже setup.py develop, но это совершенно другой бой) заполнить его все определенные зависимости.

И теперь к моей проблеме: как бы я ни старался, все, что я получаю, это зависимости, установленные как .egg в моей директории проектов, которая по крайней мере субоптимальна. Я попытался создать новую команду setuptools, которая использовала бы pip (которая, кажется, работает, хотя и неловко), но это не может быть серьезным решением (подклассификация и переопределение).

Итак, как мне сделать setup.py test заполнить virtualevn вместо моего рабочего каталога?

4b9b3361

Ответ 1

По дизайну вы не можете сделать записи tests_requires или setup_requires в виртуальной среде. Идея состоит в том, чтобы отделить то, что требуется для выполнения тестов/настройки, и того, что требуется для фактического использования установленного пакета. Например, я могу потребовать, чтобы модуль "охвата" был необходим для запуска тестов на моем пакете, но он не используется ни одним из моих кодов в пакете. Поэтому, если у меня не было "покрытия" в моей среде, когда я иду и запускаю тесты, я бы не хотел, чтобы "покрытие" было установлено в среду, если мой пакет не нуждался в нем.

Ответ 2

Если вы используете setuptools, вы можете указать тестовые зависимости, используя аргумент ключевого слова tests_require для метода setup.

from setuptools import setup

setup(
    name='your-package-name',
    version='1.0.0',
    author='me',
    author_email='[email protected]',
    install_requires=['Pygments>=1.4'],
    tests_require=['nose'],
    packages=[
        'your_package_name',
    ],
)

Когда вы запустите python setup.py test, это проверит nose и установит его в текущий активный virtualenv с помощью pip, если он еще не доступен.

Обратите внимание, что этот аргумент будет проигнорирован, если вы используете distribute.core.setup (и не будет доступна команда test).