Python升级后如何升级pip包

5

从Python 3.6升级到3.7(Windows)后,如何正确地升级所有已安装在前一个版本中使用Pip安装的软件包?此操作不使用virtualenv或pipenv。


2
编辑:澄清一下,更新旧库并不等同于将它们移到新安装中。 https://dev59.com/W17Va4cB1Zd3GeqPLqa1 是如何移动库的好例子。通常,在Python安装之后,您不会升级软件包,因为旧版本和新版本是两个独立的实体。这是一个很好的升级资源使用pip升级所有软件包 也是您的好朋友。如果要将所有已安装的库从旧版本移动到新版本,则需要执行以下操作。 - Torxed
2
我想一个好主意是从Python3.6运行pip freeze > old_reqs.txt,然后在Python3.7中运行pip install -r old_reqs.txt --upgrade - Wiggy A.
这个回答解决了你的问题吗?如何将所有模块移动到新版本的Python(从3.6到3.7) - mkrieger1
3个回答

3
你可以尝试以下脚本来升级所有已安装的软件包。
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

这仅升级当前Python版本的所有已安装软件包。如果您刚刚升级了Python,则不会有任何软件包。 - AstroFloyd

1
我使用了升级所有pip包而不升级Python的变体,使用了两个不同版本的pip(以及我的用户包): pip3.6 list --user --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3.7 install --user --upgrade pip3.6将列出安装在Python 3.6上的软件包,而pip3.7将从该列表中安装Python 3.7的软件包。如果您没有用户软件包,请省略--user标志(两次)。

1
您可以直接升级所有过时的软件包:

pip install -U $(pip list -o freeze | cut -f1 -d=)

长版:
pip install --upgrade $(pip list --outdated --format freeze | cut --fields=1 --delimiter="=")

您可以创建并使用一个文件列出所有过期的pip软件包名称:
列出所有过期的pip软件包并将输出格式化为“freeze”;
-d = 删除“=”之后的所有内容(分隔符); > 将结果转储到文件中。
pip list -o freeze | cut -f1 -d= > pip_list_outdated.txt

"Long version:"(长版本)
pip list --outdated --format freeze | cut --fields=1 --delimiter="="> pip_list_outdated.txt

输出将类似于:

输出将类似于:

gunicorn
PySimpleGUI
python-engineio
python-socketio
requests
setuptools
six

使用每行中的名称升级过时的pip软件包至最新版本:

pip install -U $(<pip_list_outdated.txt)

Long version:

pip install --upgrade $(<pip_list_outdated.txt)

错误的方式:

如果您输入:

pip list -o freeze:

你会得到类似以下的内容:
autopep8==1.4.3
chardet==3.0.4
Django==2.1.4

如果您尝试使用此结果进行升级:

pip install -U $(pip list -o freeze)

您将收到以下消息:

Requirement already up-to-date: autopep8==1.4.3 in ...
Requirement already up-to-date: chardet==3.0.4 in ...
Requirement already up-to-date: Django==2.1.4 in ...

这是因为结果中列出的版本已经安装了。
要升级到最新版本,您需要使用没有版本号的软件包名称或包含您想要升级的版本号的名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接