Как правильно создавать версии ветвей функций Python в процессе разработки? (pip и PEP-440)

#python #pip #continuous-integration #git-flow #twine

Вопрос:

Я разрабатываю библиотеку Python, используя принцип разработки Gitflow, и у меня есть этап CI для модульного тестирования и загрузки пакетов в (частный) ПыПИ. Я хочу использовать загруженный пакет для целей тестирования, прежде чем я объединю его обратно в ветку интеграции.

Другие менеджеры пакетовпопулярные инструменты) допускают идентификаторы версий, содержащие идентификаторы, специфичные для ветвей функций, например, 1.2.3-my-feature-alpha.1 в соответствии с SemVer. Однако PEP-440 запрещает использование таких схем управления версиями, а twine даже отклоняет такие загрузки.

Каков правильный (или выполнимый) подход к именованию версий пакетов Python, если вы хотите создавать такие предварительные версии (что потенциально может происходить параллельно с несколькими ветвями функций) без конфликтов идентификаторов версий в соответствии с PEP-440?

Ответ №1:

я слишком много думаю об этом.

Хотя это и не предназначено для такого использования, вы можете неправильно использовать идентификатор локальной версии, указанный в PEP-440, см.: https://www.python.org/dev/peps/pep-0440/#toc-entry-5

в вашем случае это было бы 1.2.3 my-feature.alpha.1

выпуски с идентификаторами локальных версий игнорируются при запросе выпусков с совместимым идентификатором общедоступной версии , например 1.2.3 , но все равно могут быть запрошены при прямом выборе выпуска с идентификатором локальной версии 1.2.3 my-feature-alpha.1

мой комментарий не является рекомендацией, он просто отражает мысли, которые у меня были по той же проблеме.

Комментарии:

1. Просто чтобы дополнить ваши мысли, я считаю, что было бы более точным использовать как предварительные, так и локальные идентификаторы вместе, т. Е. 1.2.3-dev0 my-feature-alpha.1 Это по-прежнему позволяет инструментам считать его предварительным выпуском, а локальный идентификатор помогает нам определить конкретную версию, которую мы хотели бы интегрировать. Было разочаровывающе обнаружить, что PEP-440 решил заблокировать предварительные выпуски до 4 различных значений, и я полностью согласен с тем, что использование локального идентификатора для этой семантики неправильно