【问题标题】:Make Existing Package Version in Virtual Environment Stick在虚拟环境中制作现有软件包版本 Stick
【发布时间】:2021-09-01 01:25:37
【问题描述】:

我有一个名为backup-tool(虚构)的实用程序。这有直接的依赖关系 在名为security-utils 的第三方库上(再次虚构)。和这个 依赖项依赖于cryptography(真正的依赖项)。所以, backup-tool 对 cryptography 有传递依赖。没有特别的 backup-tool 和 security-utils 都不需要版本。

现在我有两台服务器:一台运行 Linux,一台运行 FreeBSD。我创建一个 Linux上的虚拟环境并在其下运行pip install backup-tool。 一切正常。

在 FreeBSD 上,cryptography 版本为 2.9.2 可以不安装任何 问题。但是,其他版本会导致构建失败。 (解决方法可能是 确实找到了,但这不是重点。)

现在我设置了一个虚拟环境并使用pip install cryptography==2.9.2 预安装了正确的版本。稍后——这一切都是在一个自动化的 管道,我无法加入这两个步骤——我的工具是使用pip install backup-tool 安装的。对cryptography 的瞬态依赖被解析为 一个版本 3.x,它不起作用。

但是,如果我在单次运行 pip install backup-tool cryptography==2.9.2 一步,一切正常。这意味着backup-tool 兼容 cryptography 在 2.9.2 版本中。

我的问题:是否可以在虚拟环境中提示 pip 不应安装其他版本的cryptography(如果已经安装) 在那里? 也可以解析依赖树以匹配版本 已安装,但选择的是最新版本。

我可以在 requirements.txt 或 setup.py 的 backup-tool。但由于这是一个 环境而不是软件约束,对于大多数人来说,这将是无用的限制 设置。

【问题讨论】:

    标签: python pip dependencies virtualenv dependency-management


    【解决方案1】:

    您可以使用constraints file 来限制安装软件包时 pip 应该尝试的软件包版本范围。语法是需求文件的语法。

    例如constraints.txt:

    cryptography==2.9.2
    

    为了让 pip 始终读取此约束文件,您可以设置环境变量:

    export PIP_CONSTRAINT=constraints.txt
    

    或者,在虚拟环境下,在$VIRTUAL_ENV/pip.conf创建配置:

    [install]
    constraint = constraints.txt
    

    (路径相对于您的应用根目录)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-27
      • 2022-10-13
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 2019-03-25
      • 2020-03-28
      • 1970-01-01
      相关资源
      最近更新 更多