Co oznacza tylda równa się (~ =) w Requirements.txt?

109

W requirements.txtprzypadku biblioteki Pythona, której używam, określono jedno z wymagań, na przykład:

mock-django~=0.6.10

Co to ~=znaczy?

James Hiew
źródło

Odpowiedzi:

126

Oznacza to, że wybierze najnowszą wersję pakietu, wyższą lub równą 0.6.10, ale nadal w wersji 0.6. *, Więc nie pobierze na przykład 0.7.0. Zapewnia uzyskanie poprawek bezpieczeństwa, ale zachowuje zgodność wsteczną, jeśli opiekun pakietu przestrzega semantycznej wersji (która stwierdza, że ​​istotne zmiany powinny wystąpić tylko w głównych wersjach).

Lub, jak powiedział PEP 440:

Dla danego identyfikatora wydania VN zgodna klauzula zwolnienia jest w przybliżeniu równoważna parze klauzul porównania:

>= V.N, == V.*

Maxime Lorant
źródło
3
"w przybliżeniu"? Czy są jakieś wyjątki od tej równoważności?
AXO
1
@AXO AFAIK, istnieją subtelności w dopasowywaniu wersji przed i po wydaniu. W większości przypadków nie ma to wpływu na podstawowe użycie, w większości ograniczone do dopasowania wersji głównej / pomocniczej.
Maxime Lorant
14

To jest „kompatybilny release” wersja specifier .

Odpowiada mock-django >= 0.6.10, == 0.6.*:, i jest uporządkowanym sposobem dopasowania wersji, która ma być zgodna. Mówiąc prostym językiem, to trochę tak, jakby powiedzieć: „Potrzebuję wersji mock-django, która jest co najmniej tak nowa jak 0.6.10, ale nie tak nowa, żeby nie była z nią kompatybilna”.

Jeśli nie masz pewności co do tych wszystkich numerów wersji, szybkie spojrzenie na schemat wersji PEP440 powinno Cię rozwiązać!


źródło
7

~ = oznacza kompatybilną wersję. Nie mniej niż 0,6,10 i więcej (0,6. *).

Nurjan
źródło
3

Zgodna klauzula wydania składa się z kompatybilnego operatora wydania ~ = i identyfikatora wersji. Pasuje do dowolnej wersji kandydata, która ma być zgodna z określoną wersją.

Możesz przeczytać więcej tutaj: https://www.python.org/dev/peps/pep-0440/#compatible-release

Kieran
źródło