【问题标题】:How to pin pipenv requirements with brackets?如何用括号固定 pipenv 要求?
【发布时间】:2019-07-01 17:41:20
【问题描述】:

我刚刚做了:

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]

【问题讨论】:

    标签: python django pipenv argon2-ffi


    【解决方案1】:

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

    [packages]
    "django[argon2]" = "==2.1.5"
    

    【讨论】:

      【解决方案2】:

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

      pipenv install "django==2.1.5" "argon2-cffi==19.1"

      这是你需要的吗?

      【讨论】:

      • 好吧,我什至不确定我在用 pip install django[argon2] 做什么,或者它与你的命令相比如何。我要安装两个软件包吗?我是否安装了一个不同风格的包(django)?然后我可以分别固定 django 和 argon2 吗?问题,问题,...
      • 您正在使用setuptools documentation 中描述的设置extras(参见选项6)进行安装。我从来没有完全理解 extras 背后的动机,而且看起来它们没有得到 pipenv 命令行的完全支持。
      • 可能不建议固定附加内容。特定版本的 django 需要特定版本的附加组件。如果您想查看已安装的内容,请在 Pipfile.lock 中搜索 argon2
      【解决方案3】:

      从 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 并且:

      1. 将 Django 固定在 2.1.5 版(或指定为 ==VERSION 的任何内容)
      2. 包括 Django 对 Argon2 的可选支持

      没有argon2 包。 [argon2] 表示它是 Django 的 optional dependency or an optional feature。安装的是 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"
      },
      

      the Django docs中也提到了这一点:

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

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

      pipenv install django[argon2] 与分别安装djangoargon2-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 需要特定版本的附加功能。"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 2019-05-04
        相关资源
        最近更新 更多