#python #python-poetry
#python #python-поэзия
Вопрос:
Я использую poetry.lock
файл как источник истины в своей цепочке сборки, поэтому я хотел бы быть уверенным, что он всегда надежен. Или, другими словами, учитывая, что ни одна из моих зависимостей не выпустила новых версий, будут ли добавление и удаление зависимостей накапливать ненужные артефакты в файле блокировки?
В частности, после удаления зависимостей я иногда удалял файл блокировки и повторно генерировал его в poetry lock
качестве меры предосторожности, но заметил, что результат всегда был идентичен тому, который я только что удалил. Было ли это просто случайно или это гарантированное поведение?
Ответ №1:
Это не гарантированное поведение. Например, в одном из наших проектов у нас есть следующее в pyproject.toml
:
[tool.poetry.dependencies]
django-storages = {version = "1.7.1",extras = ["boto3"]}
Когда я запускаю poetry lock
этот проект прямо сейчас, результирующий diff выглядит следующим образом, потому что мы указываем только, какую версию django-storages
мы хотим, но не какую версию boto3
следует использовать:
diff --git a/poetry.lock b/poetry.lock
index 6d542df..0ec8d23 100644
--- a/poetry.lock
b/poetry.lock
@@ -77,10 77,10 @@ marker = "extra == "boto3""
name = "boto3"
optional = false
python-versions = "*"
-version = "1.9.189"
version = "1.9.191"
[package.dependencies]
-botocore = ">=1.12.189,<1.13.0"
botocore = ">=1.12.191,<1.13.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.2.0,<0.3.0"
@@ -91,7 91,7 @@ marker = "extra == "boto3""
name = "botocore"
optional = false
python-versions = "*"
-version = "1.12.189"
version = "1.12.191"
[package.dependencies]
docutils = ">=0.10"
@@ -359,8 359,8 @@ category = "main"
description = "Docutils -- Python Documentation Utilities"
name = "docutils"
optional = false
-python-versions = "*"
-version = "0.14"
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
version = "0.15.1"
[[package]]
category = "main"
Все, что не указано в pyproject.toml
, будет обновляться при запуске poetry lock
.
Комментарии:
1. Я не совсем уверен, описывает ли ваш пример ту же проблему, которую я имею в виду. Я бы предположил, что наличие вторичных задержек, которые обновляются, или изменение того, какие версии вы хотите закрепить, будет иметь последствия при запуске poetry lock.
2. Что мне интересно, так это то, что запуск poetry lock сразу после добавления или удаления чего-либо из poetry может иметь эффект.
3. Да, это может иметь эффект. Предположим, вы выполняете следующее
poetry init amp;amp; poetry add --extras boto django-storages
. Это приводит к установке pytz, sqlparse, boto и django и django-storages. Все эти пакеты заблокированыpoetry.lock
. Однако толькоdjango-storages
отмечено вpyproject.toml
. При запускеpoetry lock
существующий файл блокировки будет удален, и все зависимости будут снова разрешены до их последней версии, которая может отличаться.