Как setuptools устанавливает тестовые зависимости в тестовой команде python setup.py - PullRequest
2 голосов
/ 07 марта 2019

Когда я использую команду python setup.py test, вся документация , которую я видел, говорит, что setuptools справится с установкой зависимостей тестирования.Где он их устанавливает и удаляются ли они с машины после запуска набора тестов?Я заметил, что после выполнения этой команды ни один из тестовых модулей фактически не установлен в моей виртуальной среде.

Я понимаю, что он берет все модули из списка tests_require и устанавливает их где-то, но я неуверен, где, что он делает с ними потом и почему это делает.Кроме того, есть ли способ передать аргументы команде без использования флагов, как с файлом конфигурации или чем-то еще?

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Избегайте python setup.py test и tests_require, это старая «фича».

Это просто загружает тестовые файлы в каталог установки проекта, что редко бывает тем, чего разработчик хотел или ожидал случиться!Это не очень хорошо работает в современных рабочих процессах CI с виртуальными средами, где вы бы хотели, чтобы ваши зависимости были установлены в пакетах сайта.

В наши дни рекомендуемый способ сделать это с помощью setuptools - использовать extras_require tag. .См. здесь для примера.

1 голос
/ 07 марта 2019

Он устанавливает их в автоматически созданный подкаталог базы кода с именем .eggs как .egg s.Это потому, что .egg s предназначены для импорта из любого места.

Таким образом, это, скорее всего, не будет работать в современной среде, потому что пакеты не распространяются как .egg s (что потеряло конкуренцию для .whls) поэтому setuptools придется строить их из исходного кода (с bdist_egg).Что, скорее всего, не удастся для многих широко используемых бинарных пакетов с нетривиальными требованиями к сборке (не говоря уже о необходимом времени и том факте, что пакеты также не тестируются как .egg s, и может произойти сбой при такой упаковке).


Вместо этого перечисление требований к сборке в requirements.txt и вызов pip install -r requirements.txt до того, как сборка, похоже, стала широко распространенной практикой.Это не делает setup.py автоматически компилируемым из исходного кода, хотя pip.

Я пытался установить их самостоятельно с setup.py, но это оказалось хрупким (например, если у пользователя нет прав на записьна site-packages).

Наилучшим решением, принятым по крайней мере рядом крупных проектов, кажется, является просто сбой setup.py, если они отсутствуют.Это особенно полезно, если требования не к Python, а к библиотекам C, так как setup.py все равно не знает, как установить их в конкретной среде.Как видите, это естественным образом дополняет requirements.txt.

...