8

我已经做了:

pipenv install django[argon2]

这改变了我的Pipfile

-django = "==2.1.5"
+django = {extras = ["argon2"],version = "*"}

我想确定要求。首先,我将固定django2.1.5

django = {extras = ["argon2"],version = "==2.1.5"}

怎么样argon2?那是一个单独的包吗?我这样做时没有这样的包pip freeze

$ pip freeze  | grep -i argon2
argon2-cffi==19.1.0

那是什么?我如何完全固定django[argon2]

4

3 回答 3

1

在我的Pipfile中,我发现这可能通过双引号包和版本

[packages]
"django[argon2]" = "==2.1.5"
于 2021-08-30T17:15:00.990 回答
0

从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 的可选支持

没有argon2包裹。这[argon2]意味着它是 Django 的可选依赖项或可选功能。安装的是argon2-cfficffi包,它们是 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"
},

Django 文档中也提到了这一点:

要将 Argon2 用作默认存储算法,请执行以下操作:

  1. 这可以通过运行来完成python -m pip install django[argon2],这相当于python -m pip install argon2-cffi(以及来自 Django 的任何版本要求setup.cfg

与安装和单独(与其他答案pipenv install django[argon2]一样)相比,这样做的区别在于,在安装过程中,您让 Django 的 setuptools 决定使用哪个版本。这更好,因为 Django 维护人员可能使用兼容版本的.djangoargon2-cffiargon2-cffiargon2-cffi

这可以在Django 的 setup.cfg文件中看到(在撰写本文时针对 Django 3.2.6):

[options.extras_require]
argon2 = argon2-cffi >= 19.1.0

这表明当使用可选[argon2]功能时,它需要安装该范围的argon2-cffi. 正如James O' Brien 评论的那样:“特定版本的 django 需要特定版本的附加功能。

于 2021-08-26T13:02:17.713 回答
0

如果您想要完全控制,您可以:

pipenv 安装“django==2.1.5”“argon2-cffi==19.1”

这是你需要的吗?

于 2019-02-07T15:14:18.183 回答