Вопрос или проблема
Я одновременно разрабатываю два пакета Python A и B, где A использует B как зависимость. Также я использую poetry в качестве менеджера зависимостей и сборки.
Так как B все еще находится в разработке и новые требования могут возникнуть в любой момент во время разработки A, я добавил B как зависимость по пути в A с помощью команды poetry add /path/to/B --editable
.
Тем не менее, использование B как зависимости по пути не подходит для других заинтересованных в пакете A, так как им потребуется клонировать B из git. Таким образом, мой pyprojects.toml
должен определять точный тег B.
Сначала я думал, что выполнение этих двух команд должно сработать:
poetry add git+<IP>/group/[email protected]
poetry add /path/to/B --editable --group dev
Но это вызвало следующее сообщение об ошибке:
Несовместимые ограничения в требованиях A (1.0.0):
B @ file:///path/to/B (0.1.0)
B @ git+http://<IP>/group/[email protected] (0.1.0)
Я хотел бы знать, является ли эта идея рабочего процесса по сути неверной и есть ли другой подход, которому мне следует следовать.
Ответ или решение
Эффективное управление зависимостями в Python с помощью Poetry и Git
Разработка нескольких пакетов одновременно — это распространённая задача для разработчиков, и в вашем случае партия A использует пакет B в качестве зависимости. Вы столкнулись с проблемой согласования зависимостей при использовании локального пути и кода Git. В этом ответе мы рассмотрим, как организовать такую работу и избежать конфликтов.
1. Проблема конфликтующих зависимостей
Согласно вашему описанию, вы добавили B как зависимость по пути с помощью команды:
poetry add /path/to/B --editable
Это позволяет вам вносить изменения в пакет B и видеть их сразу же в A. Однако, когда вы добавляете B в проект с указанием ссылки на Git, возникает конфликт, так как Poetry не может определить, какую версию B использовать: локальную или из репозитория.
2. Два подхода к решению проблемы
Существует несколько методов, позволяющих эффективно управлять зависимостями, при этом учитывая требования вашей команды.
2.1 Использование Git для совместной работы
Если другие разработчики должны использовать B, лучше использовать только ссылку на Git. Необходимо убедиться, что в pyproject.toml
корректно указывается версия B в том же формате, что и в верхней части файла. Пример:
[tool.poetry.dependencies]
B = { git = "http://<IP>/group/repo.git", tag = "v0.1.0" }
В этом случае все разработчики смогут клонировать репозиторий B и работать с ним, используя одну и ту же версию.
2.2 Комбинированный подход с использованием pre-release версий
Если вы хотите использовать локальную версию B во время разработки A, возможно, вам стоит рассмотреть использование так называемых pre-release версий. Для этого вам нужно задать версию B, которая обозначает, что это предварительная версия и может содержать изменения. Например, вы можете установить:
poetry add /path/to/B --editable
А затем в pyproject.toml
указать:
[tool.poetry.dependencies]
B = { git = "http://<IP>/group/repo.git", version = "^0.1.0-*" }
Таким образом, вы сможете продолжать использовать развиваемую версию B для разработки, что даст вам гибкость и возможность вносить изменения в реальном времени.
3. Итоговые рекомендации
При разработке нескольких взаимосвязанных пакетов важно выбирать стратегию управления зависимостями, которая будет работать как для вас, так и для ваших коллег. Вот несколько шагов, которые вы можете предпринять:
- Выберите единую точку зависимости: если необходимо использовать Git, избегайте локальных зависимостей. Либо укажите зависимость по пути для своей разработки, либо используйте только зависимость из Git.
- Сообщите команде: убедитесь, что все разработчики понимают, какую версию пакета B они используют, и как они могут вносить изменения.
- Следите за версиями: используйте строгие версии или pre-release версии в зависимости от ваших требований разработки.
Используя эти подходы, вы сможете самостоятельно и эффективно управлять зависимостями между вашими пакетами, минимизируя проблемы и повышая продуктивность работы вашей команды.