pip:升级软件包但不升级特定依赖项

10
我的问题与这个问题非常相似:这个。但不同的是,如果我正在安装某个软件包,我只想禁用特定依赖项的升级,而不是所有依赖项。我知道有一个标志--no-deps,但它会排除所有依赖关系,而我只想排除一个。
这是一个场景: 以下是最新版本的django-rosetta依赖关系:
install_requires=[
    'six >=1.2.0',
    'Django >= 1.3'
]

现在我想升级Rosetta pip install -U django-rosetta。但它试图下载和安装Django 1.5,因为在Rosetta依赖项中需要Django >= 1.3(而我不希望这样做,因为已经安装了Django 1.4),我只想升级six包(如果有的话)。 --no-deps标志将不起作用,因为它也将排除six包。此外,我没有使用虚拟环境。请问有什么建议吗?

在这个例子中,Pip 尝试安装 Django 1.5,这是因为之前没有使用 Pip 安装 Django 1.4 吗? - Aamir Rind
2个回答

22

这个方法可行且可以让你更精确:

pip install -U django-rosetta Django==1.4

8
创建一个要求文件requirement.txt,其内容包括:
Django==1.4

那么

pip install -U django-rosetta -r requirement.txt

但是如果我按照这种方法,它会升级 requirements.txt 文件中除 Django 以外的所有包。 - Aamir Rind
也许我没有理解您的问题,但是您正在寻找一种方法来防止升级某些特定软件包(Django),同时升级其他所有内容...我的意思是要使用需求文件来阻止升级这些特定软件包,并让pip升级其他内容。 - Guillaume
刚刚测试过,如果你在requirements.txt文件中为每个软件包保留版本号,它将能够正常工作。 - Aamir Rind
@Guillaume 和一个类似的问题,如何避免安装某些子依赖项,例如,我想安装 PyYAML,它依赖于 lxml,在安装 PyYAML 时将自动安装 lxml .. 现在,我想避免安装 lxml 并手动安装它,无论是在之前还是之后 .. 怎么做? - securecurve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接