Я указал зависимости библиотеки, используя Poetry и ограничения версии ^
. Зависимости конфликтуют, если вы просто устанавливаете последнюю версию зависимостей, но они разрешимы и poetry install
правильно их разрешают. Однако pip install
из pyproject.toml
не разрешает их правильно и создает конфликт.
Минимальный пример
структура каталогов:
poetry_poc/
poetry_poc/__init__.py
pyproject.toml
Файл __init__.py
пуст, а содержимое pyproject.toml
:
[tool.poetry]
name = "poetry_poc"
version = "0.1.0"
description = "minimal example of issue"
authors = ["Your Name <[email protected]>"]
[tool.poetry.dependencies]
python = "^3.6"
requests = "^2.18.4"
snowflake-connector-python = "^2.2.9"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
Ограничение snowflake-connector-python = "^2.2.9"
разрешается только в версии 2.2.9, поэтому она устанавливается. Эта библиотека затем требует requests<2.24.0
, и мой проект указывает requests^2.18.4
, поэтому любая версия между 2.18.4 и 2.23.x будет работать нормально, но вместо этого pip устанавливает запросы 2.24.0 и сообщает:
ERROR: snowflake-connector-python 2.2.9 has requirement requests<2.24.0, but you'll have requests 2.24.0 which is incompatible.
Я пробовал это в совершенно новой виртуальной среде, в которой не было ничего, кроме pip 20.1.1 и setuptools 39.0.1, и я запускаю pip install . --no-cache-dir
, поэтому каждая зависимость будет загружена заново. Моя версия поэзии 1.0.10.
Является ли это ожидаемым поведением — этот пункт не разрешает конфликты такого типа — или я делаю что-то не так, или это ошибка?
^
не является частью PEP 440 i> (что является более или менее стандартной спецификацией). Так что это могло (не уверен, просто предположение) также внести некоторые дополнительные сложности. Может быть, было бы интересно показать, что действительно было написано в метаданных дистрибутива. Может выложите содержимое файлаMETADATA
от тача. - person sinoroc   schedule 24.07.2020poetry build
и проверив его с помощью библиотекиwheel_inspect
, я вижу, что она правильно перевела^
в запросы<3.0.0,>=2.18.4
и снежинку<3.0.0,>=2.2.9
, так что, похоже, здесь нет проблем. (Кроме того, переключение на>=
в pyproject дает тот же результат, что и в исходном посте.) - person daturkel   schedule 24.07.2020