Поэзия игнорирует зависимость в pyproject.toml

В настоящее время у меня есть проект Python3 с Poetry в качестве основного менеджера пакетов. Кроме того, я также настроил сборку и некоторые автоматизированные тесты с помощью рабочих процессов Github. Мой пакет зависит от Tensorflow, хотя автоматические тесты могут работать и без него. К сожалению, Tensorflow (который довольно большой) устанавливается каждый раз, когда рабочий процесс Github запускает эти тесты. Поскольку Tensorflow не нужен для этих тестов, и поскольку я хотел бы ускорить свою сборку, я хотел бы игнорировать зависимость Tensorflow, когда poetry install вызывается из конвейера сборки.

Кто-нибудь знает способ исключить зависимость при использовании Poetry?


person Daan Klijn    schedule 19.07.2020    source источник


Ответы (2)


Единственный другой подход, который приходит на ум, — переместить зависимость tensorflow в дополнительная категория, которая в поэзии выглядела бы так:

$ poetry add --extras tensorflow

Это означает, что он не будет установлен при запуске poetry install, если только он не является частью именованной группы, которую вы устанавливаете явно. Этого можно добиться, добавив это к вашему pyproject.toml:

[tool.poetry.extras]
runtime = ["tensorflow"]  # any name goes, I chose "runtime"  because it sounded like it'd make sense

Список можно расширить любым другим пакетом, который вам нужен только во время выполнения, а не во время тестов. Если вы хотите установить свой код для его фактического запуска, вам нужно будет выполнить это раньше:

$ poetry install --extras runtime

Это четко разделит ваши зависимости, вам придется оценить, имеет ли это смысл в вашем случае. Как показывает опыт, обычно лучше запускать хаки, чтобы тесты работали, а не ухудшать работу клиента, поэтому ваш текущий рабочий процесс имеет хорошие шансы быть лучше, чем то, что я только что написал.

person Arne    schedule 19.07.2020

В настоящее время я решил это, автоматически удаляя строки Tensorflow из pyproject.toml при каждой сборке. После этого я также снова блокирую поэзию до установки зависимостей. Это своего рода обходной путь, поэтому я все еще ищу более чистое решение.

sed '/tensorflow/d' pyproject.toml > pyproject2.toml
mv pyproject2.toml pyproject.toml
cat pyproject.toml
pip install poetry
poetry run pip install --upgrade pip
poetry lock
poetry install
person Daan Klijn    schedule 19.07.2020