python 包安装顺序

问题描述 投票:0回答:2

当我们使用pip安装python包时,有时它会安装一些其他包。例如安装 torch 需要安装 numpy。想象一下,在requirements.txt 文件中有一些软件包及其版本,但顺序不正确。我们怎样才能实现正确的顺序呢? (例如,如果 numpy 版本指定为 1.1,但列表中的先前包会自动安装最新版本的 numpy!)

我安装了librosa==0.9.2,它在安装过程中安装了scipy 1.10。但之后列表中有 scipy=1.8 。不会产生冲突吗?

pip python-packaging
2个回答
0
投票

如果您使用现代工具(Python、pip 等)和用现代技术打包的库(

[build-system]
中的
pyproject.toml
部分),安装顺序根本不重要。

在您演示的情况下,可能是 pip 必须构建 librosa (因为找不到兼容的 wheel)。 pip 确实在短暂的一次性隔离虚拟环境中构建,因此可能 pip 使用 scipy 1.10 来构建 librosa。但是在您的实际虚拟环境中安装的是不同版本的scipy1.8),这本身不是问题。在某些情况下,库仅在运行时与其构建的库兼容。


0
投票

我确信我的答案可以改进,但我喜欢管理依赖关系,以避免您所描述的子依赖关系混淆:

创建

requirements.in
,放置所需的包和版本,但不包含它们的依赖项。

# requirements.in
numpy
pandas==2.2.2

使用pip-tools生成requirements.txt:

pip[3] install pip-tools
pip-compile requirements.in

现在您将拥有一个漂亮且干净的requirements.txt,您可以在其中看到子依赖项版本,以及来自

requirements.in
的哪些软件包需要它们。

numpy==1.26.4
    # via
    #   -r requirements.in
    #   pandas
pandas==2.2.2
    # via -r requirements.in
python-dateutil==2.9.0.post0
    # via pandas
pytz==2024.1
    # via pandas
six==1.16.0
    # via python-dateutil
tzdata==2024.1
    # via pandas

通常,当前的软件包安装程序(如 pip、mamba 等)可以很好地处理软件包版本/冲突,但是,如果您有充分的理由需要指定顺序或选择,您可以创建多个需求文件并使用 docker 或其他环境管理工具按照您想要的顺序安装其中的一个选择。比如:

RUN pip install -r requirements_01.txt
RUN pip install -r requirements_02.txt
RUN pip install -r requirements_dev.txt
...
© www.soinside.com 2019 - 2024. All rights reserved.