Что это значит, если поэзия.замок содержит один и тот же пакет дважды?

#python #python-poetry

Вопрос:

Я только что обнаружил после a poetry update , что сгенерированный package.lock файл содержит блок

 [[package]] name = "black" version = "21.8b0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = "gt;=3.6.2"  [package.dependencies] click = "gt;=7.1.2" mypy-extensions = "gt;=0.4.3" pathspec = "gt;=0.9.0,lt;1" platformdirs = "gt;=2" regex = "gt;=2020.1.8" tomli = "gt;=0.2.6,lt;2.0.0" typing-extensions = {version = "gt;=3.10.0.0", markers = "python_version lt; "3.10""}  [package.extras] colorama = ["colorama (gt;=0.4.3)"] d = ["aiohttp (gt;=3.6.0)", "aiohttp-cors (gt;=0.4.0)"] jupyter = ["ipython (gt;=7.8.0)", "tokenize-rt (gt;=3.2.0)"] python2 = ["typed-ast (gt;=1.4.2)"] uvloop = ["uvloop (gt;=0.15.2)"]  [[package]] name = "black" version = "21.9b0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = "gt;=3.6.2"  [package.dependencies] click = "gt;=7.1.2" mypy-extensions = "gt;=0.4.3" pathspec = "gt;=0.9.0,lt;1" platformdirs = "gt;=2" regex = "gt;=2020.1.8" tomli = "gt;=0.2.6,lt;2.0.0" typing-extensions = {version = "gt;=3.10.0.0", markers = "python_version lt; "3.10""}  [package.extras] colorama = ["colorama (gt;=0.4.3)"] d = ["aiohttp (gt;=3.6.0)", "aiohttp-cors (gt;=0.4.0)"] jupyter = ["ipython (gt;=7.8.0)", "tokenize-rt (gt;=3.2.0)"] python2 = ["typed-ast (gt;=1.4.2)"] uvloop = ["uvloop (gt;=0.15.2)"]  [[package]] name = "black" version = "21.10b0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = "gt;=3.6.2"  [package.dependencies] click = "gt;=7.1.2" mypy-extensions = "gt;=0.4.3" pathspec = "gt;=0.9.0,lt;1" platformdirs = "gt;=2" regex = "gt;=2020.1.8" tomli = "gt;=0.2.6,lt;2.0.0" typing-extensions = {version = "gt;=3.10.0.0", markers = "python_version lt; "3.10""}  [package.extras] colorama = ["colorama (gt;=0.4.3)"] d = ["aiohttp (gt;=3.7.4)"] jupyter = ["ipython (gt;=7.8.0)", "tokenize-rt (gt;=3.2.0)"] python2 = ["typed-ast (gt;=1.4.3)"] uvloop = ["uvloop (gt;=0.15.2)"]  

Как видите, есть черное 21.8b0 , и черное 21.9b0 , и черное 21.10b0 . Что это значит? Какая версия будет установлена?

Ответ №1:

Это похоже на дамп промежуточного пула рассматриваемых опций, называемых транзакциями в поэзии (например, пакеты с версиями, зависящими от разных маркеров платформы). По умолчанию решение может приниматься по «последнему» правилу.

Я могу воспроизвести это поведение с помощью

 [tool.poetry.dependencies] python = "~3.8" numpy = [  {version="1.18.*",markers="python_version=='3.8.*'"},  {version="1.21.*",markers="python_version=='3.9.*'"}, ]  

и poetry install --dry-run -vv создает обе версии в файле блокировки.

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