如何使用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文件提交到存储库,同时仍然允许安装热修复程序。

其他回答

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

另一个解决方案是使用升级需求包

pip install upgrade-requirements

然后运行:

upgrade-requirements

它将升级所有不是最新版本的包,并在最后创建一个更新后的requirements.txt。

我编辑requirements.txt,如下所示,然后运行$sh ./requirements.txt

pip install -U amqp;
pip install -U appdirs;
pip install -U arrow;
pip install -U Babel;
pip install -U billiard;
pip install -U celery;
pip install -U Django;
pip install -U django-cors-headers;
pip install -U django-crispy-forms;
pip install -U django-filter;
pip install -U django-markdown-deux;
pip install -U django-pagedown;
pip install -U django-timezone-field;
pip install -U djangorestframework;
pip install -U fcm-django;
pip install -U flower;
pip install -U gunicorn;
pip install -U kombu;
pip install -U Markdown;
pip install -U markdown2;
pip install -U packaging;

我已经回答了这个问题。以下是我的解决方案:

因为没有简单的方法来逐个升级包,并更新requirements.txt文件,所以我写了这个pip-upgrader,它也更新了所选包(或所有包)的requirements.txt文件中的版本。

安装

pip install pip-upgrader

使用

激活您的virtualenv(这很重要,因为它还将在当前的virtualenv中安装升级包的新版本)。

CD到你的项目目录,然后运行:

pip-upgrade

高级用法

如果需求被放置在一个非标准的位置,将它们作为参数发送:

pip-upgrade path/to/requirements.txt

如果你已经知道要升级什么包,只需将它们作为参数发送:

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

如果需要升级到预发布/后发布版本,请在命令中添加——pre-release参数。

完全披露:这个包是我写的。

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

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