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


当前回答

第二个答案是最有用的,但我想做的是锁定一些包,而其他包在最新版本(例如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,则将安装。

其他回答

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

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的顺序。:)

希望这能有所帮助!

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

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;

修复对特定版本的依赖关系是推荐的做法。

下面是另一个使用pur来保持依赖关系的解决方案!

给pur你的requirements.txt文件,它会自动更新你所有的高级包到最新版本,保持你原来的格式和注释到位。

例如,在example requirements.txt上运行pur将包更新到当前可用的最新版本:

$ pur -r requirements.txt
Updated flask: 0.9 -> 0.10.1
Updated sqlalchemy: 0.9.10 -> 1.0.12
Updated alembic: 0.8.4 -> 0.8.6
All requirements up-to-date.

由于pur从不修改您的环境或安装的包,它非常快,您可以安全地运行它,而不用担心破坏您的本地虚拟环境。Pur将更新requirements.txt文件与安装更新分开。因此,您可以使用pur,然后在不同的步骤中安装更新。

你可以试试:

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

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

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