Нужно ли мне проверять poetry.блокировать файлы?

#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 существующий файл блокировки будет удален, и все зависимости будут снова разрешены до их последней версии, которая может отличаться.