python升级后升级pip软件包

时间:2018-10-16 09:20:36

标签: python pip upgrade

从Python 3.6升级到3.7(Windows)之后,升级以前版本中随Pip安装的所有现有软件包的正确方法是什么?这不是使用virtualenv或pipenv。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用以下脚本来升级所有已安装的软件包。

pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

答案 1 :(得分:0)

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

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

长版:

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

或者您可以创建并使用文件列出所有过时的pip包名称:

list所有过时的pip包,并将输出格式设置为“冻结”;

-d=在“ =”(定界符)之后剪掉所有内容;

>将结果转储到文件中。

pip list -o freeze | cut -f1 -d= > pip_list_outdated.txt

长版:

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)

长版:

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 ...

发生这种情况是因为结果中列出的版本已经安装。

要升级到最新版本,您需要不带版本的软件包名称或带有要升级的版本号的名称。

答案 2 :(得分:0)

我使用了upgrading all pip packages without Python upgrade的一种变体,使用了两个不同版本的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标志(两次)。