在虚拟环境棒中制作现有的包版本

时间:2021-06-16 08:30:18

标签: python pip dependencies virtualenv dependency-management

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

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

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

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

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

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

我可以进一步指定(瞬态)依赖项 cryptography cryptography==2.9.2requirements.txtsetup.py。但由于这是一个 环境而不是软件约束,这对大多数人来说是无用的限制 设置。

1 个答案:

答案 0 :(得分:2)

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

例如constraints.txt

cryptography==2.9.2

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

export PIP_CONSTRAINT=constraints.txt

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

[install]
constraint = constraints.txt

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