从 pip 的 Requirement Specifier 文档中,您可以组合这些形式:
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 的可选支持
没有argon2 包。 [argon2] 表示它是 Django 的 optional dependency or an optional feature。安装的是 argon2-cffi 和 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"
},
the Django docs中也提到了这一点:
要将 Argon2 用作默认存储算法,请执行以下操作:
- 这可以通过运行
python -m pip install django[argon2] 来完成,相当于 python -m pip install argon2-cffi(以及来自 Django 的 setup.cfg 的任何版本要求强>)
pipenv install django[argon2] 与分别安装django 和argon2-cffi(与this other answer 一样)的区别在于,在安装过程中,您让 Django 的 setuptools 决定使用哪个版本的argon2-cffi。这更好,因为 Django 维护人员可能使用argon2-cffi 的兼容版本 编写和测试了支持 Argon2 的代码。
这可以在Django's setup.cfg 文件中看到(在撰写本文时适用于 Django 3.2.6):
[options.extras_require]
argon2 = argon2-cffi >= 19.1.0
这表示当使用可选的[argon2] 功能时,它需要安装该范围的argon2-cffi 版本。 As James O' Brien commented: "特定版本的 django 需要特定版本的附加功能。"