Как заставить `setup.py test` установить зависимости в моем` virtualenv`? - PullRequest
30 голосов
/ 07 марта 2012

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

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

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

Ответы [ 2 ]

12 голосов
/ 08 января 2014

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

0 голосов
/ 11 мая 2012

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

from setuptools import setup

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

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

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

...