Как setuptools устанавливает тестовые зависимости в тестовой команде python setup.py

Допустим, вы открываете файл с помощью оператора with, как и должно быть. Затем вы сделаете что-то подобное для чтения из вашего файла:

with open('somefile.txt', 'w+') as f:
    # Note that f has now been truncated to 0 bytes, so you'll only
    # be able to read data that you wrote earlier...
    f.write('somedata\n')
    f.seek(0)  # Important: return to the top of the file before reading, otherwise you'll just read an empty string
    data = f.read() # Returns 'somedata\n'

Обратите внимание на f.seek(0) - если вы забудете об этом, вызов f.read() попытается прочитать с конца файл и вернет пустую строку.

2
задан Johnny Metz 7 March 2019 в 03:07
поделиться

2 ответа

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

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


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

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

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

0
ответ дан ivan_pozdeev 7 March 2019 в 03:07
поделиться

Избегайте python setup.py test и tests_require, это старая фраза "особенность".

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

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

0
ответ дан wim 7 March 2019 в 03:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: