如何使用pip更新/升级软件包?

685

使用pip更新软件包的方法是什么?以下方法均不适用:

pip update
pip upgrade

我知道这是一个简单的问题,但这是必要的,因为它不容易找到(pip 文档没有弹出,而来自 stack overflow 的其他问题虽然相关,但并不完全相关)

11个回答

1067

方法是这样的

pip install <package_name> --upgrade

简而言之

pip install <package_name> -U

使用sudo会要求输入你的 root 密码以确认操作,但尽管很常见,但被认为是不安全的

如果您没有 root 密码(如果您不是管理员),您应该考虑使用virtualenv

您也可以使用用户标志仅在此用户上安装它。

pip install <package_name> --upgrade --user

1
但是如果我需要升级包及其依赖项(例如Flask),这种方式是否也适用? - Alexey Nikonov
1
默认情况下,仅在需要时更新依赖项。所以,是的。在此处查看更多信息https://dev59.com/NnE85IYBdhLWcg3wRBRU#41471712 - borgr

111

对于一个非特定的软件包和更通用的解决方案,你可以查看pip-review。它是一个检查哪些软件包需要更新的工具。

安装方法:

$ pip install pip-review

然后运行:

$ pip-review --interactive
requests==0.14.0 is available (you have 0.13.2)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit y

27
虽然这并没有直接回答问题,但对于一些人来说,这可能正是他们寻找的信息。 - borgr
2
请注意,需要先使用 pip 安装 pip-review - karatedog
1
pip-review 是否检查所有包,包括那些不是由 pip 安装的? - Gathide

完整输出(6行): 用法:setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] 或:setup.py --help [cmd1 cmd2 ...] 或:setup.py --help-commands 或:setup.py cmd --help
错误:无效命令 'bdist_wheel'

错误:构建 pip-review 的 wheel 失败
- makkasi

35

在终端中使用此代码:

python -m pip install --upgrade PACKAGE_NAME

例如,我想更新pip软件包:

python -m pip install --upgrade pip

更多示例:

python -m pip install --upgrade selenium
python -m pip install --upgrade requests
...

16

同时,在 Jupyter Notebook 中,通过在代码单元格中运行以下代码,您可以更新软件包:

%pip install <package_name> --upgrade

发布此类建议时,请使用当前的最佳实践。您需要建议使用现代魔术命令%pip install,以确保安装发生在笔记本下面的内核支持环境中。只有感叹号是做不到这一点的,并且可能会导致问题/混淆。因此,增加魔术命令的动力就产生了。请参见 这里 了解更多关于现代魔术命令的信息。 - Wayne

15

tl;dr 更新所有已安装软件包的脚本。

如果您只想升级一个软件包,请参考@borgr的回答。 我通常发现有必要或至少愉悦地一次升级所有软件包。 目前,pip不支持原生地执行该操作,但使用sh脚本很简单。 您可以使用pip listawk(或cuttail)和命令替换。 我的普通一行代码是:

for i in $(pip list -o | awk 'NR > 2 {print $1}'); do sudo pip install -U $i; done

这将要求您输入root密码。如果您没有访问权限,则可以考虑使用pip--user选项或者virtualenv


13
import subprocess as sbp
import pip
pkgs = eval(str(sbp.run("pip3 list -o --format=json", shell=True,
                         stdout=sbp.PIPE).stdout, encoding='utf-8'))
for pkg in pkgs:
    sbp.run("pip3 install --upgrade " + pkg['name'], shell=True)

将文件保存为xx.py
然后运行Python3 xx.py
环境:python3.5+ pip10.0+


13
我使用以下代码来更新所有过时的软件包:
pip list --outdated --format=freeze | awk -F '==' '{print $1}' | xargs -n1 pip install -U

在更新的pip版本中,上述方法会出错,使用以下方法代替:

pip list --outdated --format=json | jq '.[].name' | xargs -n1 pip install -U

pip list --outdated --format=freeze 在当前最新的 pip 版本 23.1.2 中失败,显示错误信息:ERROR: List format 'freeze' can not be used with the --outdated option.;而 pip list --outdated --format=json 可以正常工作 --> 可以使用 jq 处理输出结果,而不是使用 awk - ssc

9

虽然不是主题,但有人可能会想要更新pip本身(请参见这里)。

要升级Python3.4+的pip,必须使用以下命令pip3:

sudo pip3 install pip --upgrade

这将升级位于 /usr/local/lib/python3.X/dist-packages 的pip。

否则,要升级Python2.7的pip,您可以按以下方式使用pip:

sudo pip install pip --upgrade

这将升级位于以下路径的pip:/usr/local/lib/python2.7/dist-packages。

12
这不是OP所问的。他正在询问如何升级特定软件包,而不是PIP本身。 - commadelimited
2
尽管如此,在这些其他答案中拥有它似乎是有帮助的。 - uhoh

2
对于Windows Python用户来说,这里有一个PowerShell一行命令,可以将所有过时的软件包更新到最新版本。
pip list --outdated | Select-Object -Skip 2 | Select-String "^\S+" | ForEach-Object { pip install --upgrade $_.Matches[0].Value }

或者一个简洁一些(但不够清晰)的版本:
pip list -o | select -Skip 2 | sls "^\S+" | % { pip install -U $_.Matches[0].Value }

-1

如果你使用 requirements.txt,你可以使用一个在线工具 https://pkgui.com/pip

它会编辑 requirements.txt 文件并允许通过下拉菜单进行手动更改。

enter image description here


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