使用pip命令从requirements.txt升级Python包

257 投票
17 回答
277056 浏览
提问于 2025-04-18 13:26

我怎么用pip命令从requirements.txt文件中升级所有的python包呢?

我试过下面这个命令

$ pip install --upgrade -r requirements.txt

因为这些python包后面都有版本号(比如Django==1.5.1),所以它们似乎无法升级。有没有比手动编辑requirements.txt文件更好的方法呢?

编辑

正如Andy在他的回答中提到的,包被固定在特定的版本上,所以通过pip命令无法升级这些包。

不过,我们可以使用pip-tools来实现这个,命令如下。

$ pip-review --auto

这个命令会自动升级requirements.txt中的所有包(确保先用pip安装pip-tools)。

17 个回答

15

另一种解决方案是使用 upgrade-requirements 这个工具包。

pip install upgrade-requirements

然后运行:

upgrade-requirements

这个工具会把所有不是最新版本的包都升级到最新版本,并且最后还会生成一个更新后的 requirements.txt 文件。

33

我建议你固定所有的依赖项,这样可以让你的构建过程更加可预测

这样做之后,你可以像下面这样一次性更新所有依赖项

sed -i '' 's/[~=]=/>=/' requirements.txt
pip install -U -r requirements.txt
pip freeze | sed 's/==/~=/' > requirements.txt

完成以上步骤后,记得用新的一组包来测试你的项目,最后将requirements.txt文件提交到代码库中,同时也要允许安装一些紧急修复。

154

你可以试试:

pip install --upgrade --force-reinstall -r requirements.txt

你也可以忽略已经安装的包,直接安装新的:

pip install --ignore-installed -r requirements.txt
241

我之前在这里回答过这个问题 这里。这是我的解决方案:

因为没有简单的方法可以一个一个地升级软件包,也没有方便的方式来更新requirements.txt文件,所以我写了这个pip-upgrader,它可以更新你选择的软件包(或者所有软件包)在requirements.txt文件中的版本

安装

pip install pip-upgrader

使用方法

先激活你的虚拟环境(这很重要,因为它会在当前的虚拟环境中安装升级后软件包的新版本)。

进入你的项目目录,然后运行:

pip-upgrade

高级用法

如果你的requirements文件放在非标准位置,可以把它们作为参数传递:

pip-upgrade path/to/requirements.txt

如果你已经知道想要升级哪个软件包,只需把它们作为参数传递:

pip-upgrade -p django -p celery -p dateutil

如果你需要升级到预发布或后发布版本,可以在命令中加上--prerelease参数。

完全透明:这是我写的包。

79

不可以。你的需求文件已经被锁定到特定的版本。如果你的需求是设置为那个版本的,就不应该尝试升级到更高的版本。如果你确实需要升级,那你就需要在需求文件中切换到不锁定版本。

举个例子:

lxml>=2.2.0

这会把lxml升级到任何比2.2.0更新的版本。

lxml>=2.2.0,<2.3.0

这会把lxml升级到2.2.0和2.3.0之间的最新版本。

撰写回答