Управление версиями python пакетов - PullRequest
2 голосов
/ 16 февраля 2020

Как лучше управлять разными версиями пакетов? Я знаю о virtualenv, но я не уверен, что он подходит в моем случае.

Моя проблема:

Учтите, что у меня есть 2 проекта (P1, P2), которые оба используют 1 небольшой проект (P3 ). Я использую git подмодули и добавляю P3 к P1 и P2.

Тогда у меня есть P4, который использует все проекты, описанные выше, и P4 требуется последняя версия P3.

Как иметь дело с Это? Я хочу, чтобы P1, P2, P4 использовали свою собственную версию P3. Но когда я собираю P4, у меня есть только одна версия P3.

Структура проектов:

Все проекты имеют такую ​​структуру (некоторые файлы опущены):

P4 пример:

├── project_name (sources are here)
├── Makefile
├── submodules
│   └── P1
│       ├── submodules
│       │   └── P3
│   └── P2
│       ├── submodules
│       │   └── P3
│   └── P3
├── tests
└── setup.py

Как импортируются подпроекты:

Здесь нет ничего удивительного, все проекты импортируют P3 таким образом, поскольку была установлена ​​только одна версия.

Итак P1 использует: from P3 import something

И P4 также использует:

from P3 import something

from P1 import something_else

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Общее правило заключается в том, что запуск нескольких версий одного и того же проекта в одной среде Python не поддерживается. Очевидно (как и любой другой вид ограничений в программном обеспечении) есть способы обойти это go, но все они требуют немало работы.

Из того, что я могу извлечь из этого конкретного вопроса, я считаю vendoring может быть подходящей техникой, чтобы обойти это ограничение, при этом требуя как можно меньше модификаций текущего состояния проекта.

1. с git подмодулями

  • Сохранить P3 в другом git хранилище.
  • Использовать git субмодулей для двух разных копий P3 в основном проекте.

2. с помощью инструмента продавца


Как лучше управлять разными версиями пакетов? Я знаю о virtualenv, но я не уверен, что он подходит в моем случае.

Это не так. Виртуальные среды могут помочь, например, работать над двумя разными проектами, используя две разные версии одной и той же библиотеки. Но эти два проекта должны будут жить в двух разных виртуальных средах. Таким образом, вы не можете одновременно импортировать один проект из двух разных версий одной и той же библиотеки.

0 голосов
/ 16 февраля 2020

Virtualenv будет работать, почему вы думали, что это не сработает?

...