Что означает тильда равно (~ =) в файле requirements.txt?


100

В requirements.txtбиблиотеке Python, которую я использую, одно из требований указано следующим образом:

mock-django~=0.6.10

Что ~=значит?

Ответы:


119

Это означает, что он выберет последнюю версию пакета, больше или равную 0.6.10, но все еще имеющую версию 0.6. *, Поэтому, например, он не будет загружать 0.7.0. Это гарантирует, что вы получите исправления безопасности, но сохраните обратную совместимость, если сопровождающий пакета соблюдает семантическое управление версиями (в котором указано, что критические изменения должны происходить только в основных версиях).

Или, как сказано в PEP 440:

Для данного идентификатора выпуска VN раздел о совместимом выпуске приблизительно эквивалентен паре предложений сравнения:

>= V.N, == V.*


3
"примерно"? Есть ли исключения из этой эквивалентности?
AXO

1
@AXO AFAIK, есть тонкости с сопоставлением версий до и после выпуска. В большинстве случаев это не повлияет на базовое использование, в основном ограниченное сопоставлением основной / дополнительной версии.
Maxime

12

Это спецификатор версии «совместимого выпуска» .

Это эквивалент:, mock-django >= 0.6.10, == 0.6.*и представляет собой удобный способ сопоставления версии, которая должна быть совместимой. На простом английском это немного похоже на высказывание: «Мне нужна версия mock-django, которая по крайней мере такая же новая, как 0.6.10, но не настолько новая, чтобы быть несовместимой с ней».

Если вы не уверены во всем этом номере версии, беглый взгляд на схему версии PEP440 поможет вам разобраться!



3

Предложение совместимого выпуска состоит из оператора совместимого выпуска ~ = и идентификатора версии. Он соответствует любой версии кандидата, которая, как ожидается, будет совместима с указанной версией.

Вы можете прочитать больше здесь: https://www.python.org/dev/peps/pep-0440/#compatible-release

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.