如何使用pip命令从requirements.txt文件升级我所有的python包?

尝试以下命令

$ pip install --upgrade -r requirements.txt

因为python包的后缀是版本号(Django==1.5.1),所以它们似乎不会升级。有没有比手动编辑requirements.txt文件更好的方法?

EDIT

正如Andy在他的回答中提到的,包被固定到特定的版本,因此不可能通过pip命令升级包。

但是,我们可以使用以下命令使用pip-tools实现这一点。

$ pip-review --auto

这将自动升级requirements.txt中的所有包(确保使用PIP install命令安装PIP -tools)。


当前回答

我建议冻结所有依赖项,以获得可预测的构建。

当这样做时,你可以像这样一次更新所有依赖项:

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

完成上述工作后,使用新的包集测试您的项目,并最终将requirements.txt文件提交到存储库,同时仍然允许安装热修复程序。

其他回答

你可以试试:

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

你也可以忽略已安装的包并安装新的包:

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

更健壮的解决方案是IMO使用依赖项管理,例如poetry, https://python-poetry.org,它带有详尽的依赖项解析器。

不。您的需求文件已经固定到特定的版本。如果您的需求已设置为该版本,则不应尝试升级到超出这些版本的版本。如果您需要升级,那么您需要在需求文件中切换到未固定的版本。

例子:

lxml>=2.2.0

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

lxml>=2.2.0,<2.3.0

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

第二个答案是最有用的,但我想做的是锁定一些包,而其他包在最新版本(例如youtube-dl)。

一个requirements.txt的例子是这样的(~表示兼容):

Pillow==6.2.2
requests~=2.22.0
youtube_dl

然后在终端中,使用命令pip install——upgrade -r requirements.txt

这确保枕头将保持在6.2.2,请求将升级到最新的2.22。X(如果可用),如果还没有安装最新版本的youtube-dl,则将安装。

我想最简单的解决方案是创建requirements.txt:

pip freeze | sed 's/==/>=/' > requirements.txt