如何使用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)。


当前回答

你可以在Linux和Mac上使用以下命令:

cat requirements.txt | cut -f1 -d= | xargs pip install -U

其他回答

你可以在Linux和Mac上使用以下命令:

cat requirements.txt | cut -f1 -d= | xargs pip install -U

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

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

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

我也不得不这么做……使用下面的一行小代码来完成这项工作:

packages=$(cat requirements.txt | sed 's/==.*//g'); echo $packages | xargs pip3 install -U; freeze=$(pip3 freeze); for p in $(echo $packages); do echo $freeze | grep -E "^${p}==" >> requirements.new; done

哪一个:

packages=$(cat requirements.txt | sed 's/==.*//g') creates a list of the current packages names in requirements.txt (removing the version). echo $packages | xargs pip3 install -U then passes all of the packages as arguments to pip3 to upgrade. freeze=$(pip3 freeze); Gets all of the current package versions in the format required for requirements.txt for p in $(echo $packages) then iterates through the package names echo $freeze | grep -E "^${p}==" >> requirements.new gets the package version line from the pip freeze output which matches the package and writes to new requirements.txt

这样做还有一个额外的好处,那就是保留原始requirements.txt的顺序。:)

希望这能有所帮助!

如果你在django项目中安装了任何东西,并且在安装后你想要更新你的需求文件,这个命令可以更新你的需求文件 PIP freeze > requirements.txt

如果你的需求文件在你的项目中不存在,你可以使用这个命令来创建新的需求文件 PIP freeze > requirements.txt