Как обрабатывать несколько основных версий зависимости - PullRequest
0 голосов
/ 04 апреля 2019

Мне интересно, как работать с несколькими основными версиями библиотеки зависимостей.

У меня есть библиотека с открытым исходным кодом, Foo, на ранней стадии выпуска. Библиотека является оболочкой для другой библиотеки с открытым исходным кодом, Bar. Bar только что запустил новую основную версию. Foo в настоящее время поддерживает только предыдущую версию. Поскольку я предполагаю, что многие люди будут очень медленно переходить с предыдущей основной версии Bar на новую основную версию, я не хочу сам переходить на новую версию.

Как это лучше всего обрабатывается? Как я вижу, у меня есть эти варианты

  1. Переключиться на новую основную версию, что может отказать людям в старой версии.
  2. Продолжайте использовать старую версию, потенциально отказывая людям в новой версии.
  3. Имеет две разные ветви, обновляя обе ветви для всех новых функций. Не уверен, как это работает с PyPi. Разве мне не приходилось каждый раз выпускать под разными номерами версий?
  4. Разделите хранилище на две части. Не очень хочу это делать.

Идеальным решением для меня было бы иметь такую ​​же кодовую базу, где я мог бы иметь какую-то макросоподобную вещь C / C ++, где, если версия new, использовать new_bar_function, иначе использовать old_bar_function , При установке библиотеки из PyPi уже установленная версия основной версии определяет, какая версия используется. Если версия не установлена, установите самую новую версию.

Буду очень признателен за некоторые указатели.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Имеют две разные ветви, обновляя обе ветви для всех новых функций. Не уверен, как это работает с PyPI. Разве мне не приходилось каждый раз выпускать под разными номерами версий?

Да, вы могли бы выпустить версию 1.x (которая поддерживает старую версию) и версию 2.x (которая поддерживает новую версию) и выпустить обе версии одновременно. Это общий шаблон для пакетов, которые хотят внести критические изменения, но при этом хотят продолжать поддерживать предыдущий выпуск.

1 голос
/ 04 апреля 2019

Обычно информация о версии пакета доступна после импорта с помощью package.__version__. Вы можете разобрать эту информацию из Bar и на основании этого решить, что делать (выбрать соответствующие вызовы функций, остановить программу или вызвать ошибку или ...).

Вы также можете получить некоторое представление от https://www.python.org/dev/peps/pep-0518/ о способах управления установкой зависимостей.

Похоже, что если у кого-то уже установлена ​​Bar, установка Foo обновляет только Bar, если Foo явно требует новую версию. См https://github.com/pypa/pip/pull/4500 и этот ответ

...