Как закрепить требования pipenv скобками?
Я только что сделал:
pipenv install django[argon2]
И это изменило мой Pipfile
:
-django = "==2.1.5"
+django = {extras = ["argon2"],version = "*"}
Я хочу закрепить требования. Сначала я прикреплю django
в 2.1.5
:
django = {extras = ["argon2"],version = "==2.1.5"}
Как насчет argon2
? Это отдельный пакет? Там нет такого пакета, когда я делаю pip freeze
:
$ pip freeze | grep -i argon2
argon2-cffi==19.1.0
Что это такое? Как мне полностью закрепить django[argon2]
?
3 ответа
В моем
Pipfile
, Я нашел это возможным, дважды цитируя пакет и версию
[packages]
"django[argon2]" = "==2.1.5"
Из документации спецификатора требований для pip вы можете комбинировать эти формы:
SomeProject == 1.3 SomeProject >=1.2,<2.0 SomeProject[foo, bar]
Это означает, что вы можете выполнить эту команду:
pipenv install "django[argon2]==2.1.5"
Что генерирует эту запись Pipfile:
django = {version = "==2.1.5", extras = ["argon2"]}
Эта команда устанавливает Django и:
- Закрепляет Django версии 2.1.5 (или любой другой, указанной как
==VERSION
) - Включает дополнительную поддержку Django для Argon2
- См. Раздел « » в документации по Django.
Здесь нет
argon2
упаковка. Это означает, что это дополнительная зависимость или дополнительная функция Django. Устанавливается и
cffi
пакеты, которые являются необязательными зависимостями, которые Django должен использовать для использования Argon2. Вы можете увидеть это в Pipfile.lock:
"argon2-cffi": {
"hashes": [
...
],
"version": "==20.1.0"
},
"cffi": {
"hashes": [
...
],
"version": "==1.14.6"
},
"django": {
"extras": [
"argon2"
],
"hashes": [
...
],
"index": "pypi",
"version": "==2.1.5"
},
Это также упоминается в Использование Argon2 с Djangoдокументации Django :
Чтобы использовать Argon2 в качестве алгоритма хранения по умолчанию, сделайте следующее:
- Это можно сделать, запустив
python -m pip install django[argon2]
, что эквивалентноpython -m pip install argon2-cffi
(наряду с любыми требованиями к версии от Django'ssetup.cfg
)
Разница в выполнении
pipenv install django[argon2]
по сравнению с установкой
django
и отдельно (как и в этом другом ответе ) заключается в том, что во время установки вы позволяете инструментам установки Django решать, какую версию использовать. Это лучше, потому что разработчики Django, вероятно, написали и протестировали код для поддержки Argon2, используя совместимую версию.
Это можно увидеть в файле setup.cfg Django (для Django 3.2.6 на момент написания):
[options.extras_require]
argon2 = argon2-cffi >= 19.1.0
что указывает на то, что при использовании необязательного
[argon2]
функция, необходимая для установки этого диапазона версии
argon2-cffi
. Как прокомментировал Джеймс О'Брайен : « Для конкретной версии django потребуются определенные версии дополнительных компонентов ».
Если вам нужен полный контроль, вы можете:
pipenv install "django == 2.1.5" "argon2-cffi == 19.1"
Это то, что вам нужно?