Как закрепить требования 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 и:

  1. Закрепляет Django версии 2.1.5 (или любой другой, указанной как ==VERSION)
  2. Включает дополнительную поддержку 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 в качестве алгоритма хранения по умолчанию, сделайте следующее:

  1. Это можно сделать, запустив python -m pip install django[argon2], что эквивалентно python -m pip install argon2-cffi (наряду с любыми требованиями к версии от Django's setup.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"

Это то, что вам нужно?

Другие вопросы по тегам