Как заставить "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
вместо моего рабочего каталога?
Ответы
Ответ 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
).