如何从虚拟环境内部更新点子本身?


523

我可以更新点子管理的软件包,但是如何更新点子本身?据介绍pip --version,我目前在virtualenv中安装了pip 1.1,我想更新到最新版本。

这是什么命令?我需要使用distribute还是本机pip或virtualenv命令?我已经尝试过pip update,并pip update pip没有成功。


40
pip install --upgrade pip?这只是另一个PyPI软件包。
Cairnarvon

1
该命令给我“ / Users / zak / MyProject / venv / bin / pip安装:错误:无此类选项:
update

4
--upgrade,不是--update,抱歉。我立即编辑了我的帖子,但是您一定在错误的时间看到了它。
Cairnarvon

2
@Cairnarvon命令的用途不同pip3吗?我正在尝试pip3,但它只是告诉我找不到它,然后再次抱怨它不是最新的……甚至不让我更新/升级它!
查理·帕克

Answers:


928

pip仅仅是一个的PyPI包像任何其他; 您可以像升级任何软件包一样使用它来升级自身:

pip install --upgrade pip

在Windows上,推荐的命令是:

python -m pip install --upgrade pip

53
在Windows下,我尝试使用pip升级pip时遇到权限问题。相反,我使用easy_install进行了升级:easy_install pip
bsa

8
当我执行此pip似乎会升级(1.1-> 1.4),但是当我执行“ pip --version”时,它仍显示旧版本1.1。尝试停用并再次激活virtualenv,但它仍显示旧版本。
Zitrax

40
在Windows上,最好使用这样的命令:python -m pip install --upgrade pip避免从scripts目录运行pip.exe。
bialix 2014年

@Zitrax您解决了这个问题吗?我面临着同样的问题。
穆罕默德·阿里·巴格谢什米拉尼

@Mohammadalibaghershemirani对不起,这是前一段时间-不记得了。
Zitrax

58

更安全的方法是通过python模块运行pip

python -m pip install -U pip

在Windows上,尝试替换自身的二进制文件似乎存在问题,此方法可解决该限制。


9
如果检测到自身更新版本,这就是pip自身的建议。
tephyr

1
我相信这样做比较安全的原因是,在某些操作系统(Windows)上,直接运行pip可以在可执行文件上创建文件锁,这将阻止对其进行更新。通过调用Python并告诉它直接加载模块,可以避免访问可执行文件。
jpmc26 2016年

您必须在管理员模式下运行命令提示符才能使其工作。我尝试了其他一些建议,但在以管理员方式重新启动命令提示符窗口之前,没有任何效果,然后此命令运行良好。
DaveN59 '18

42

就我而言,我的pip版本已损坏,因此更新本身无法进行。

固定:

(inside virtualenv):easy_install -U pip

1
我也是这样。我尝试了所有其他方法,但是只有这种方法可以帮助我。谢谢 !
levif

同样,这是在Debian上对我有效的唯一方法。使用python或pip从virtualenv内部升级pip将会失败,因为它拒绝卸载位于venv外部的现有pip。
user3748764

运行此命令向我显示了很多内容,包括Download error on https://pypi.python.org/simple/pip/: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) -- Some packages may not be found!运行--upgrade时未显示的内容。这很可能是安装任何pip软件包失败以及通过pip升级pip失败的原因,SSL似乎已损坏。
Vadorequest

9

我在Debian Jessie下尝试了上面提到的所有这些解决方案。它们不起作用,因为它只需要由debian软件包管理器编译的最新版本1.5.6相当于6.0.x版本。某些使用pip作为前提条件的软件包将无法正常运行,例如spaCy(需要使用--no-cache-dir选项才能正常运行)。

因此,解决这些问题的实际最佳方法是运行从wget下载的get-pip.py,它是从网站或使用curl进行的,如下所示:

 wget https://bootstrap.pypa.io/get-pip.py -O ./get-pip.py
 python ./get-pip.py
 python3 ./get-pip.py

这将安装当前版本,在编写此解决方案时为9.0.1,这远远超出了Debian提供的功能。

 $ pip --version
 pip 9.0.1 from /home/myhomedir/myvirtualenvdir/lib/python2.7/dist-packages (python 2.7)
 $ pip3 --version
 pip 9.0.1 from /home/myhomedir/myvirtualenvdir/lib/python3.4/site-packages (python 3.4)

2
对于pip install --upgrade pip失败时很有帮助
Aneuway

如果我可以几次赞成这个答案,我会的。这只是通过更新为pip 10.x解决了pip 9.x因SSL错误而失败的问题。参见stackoverflow.com/questions/25981703/…–
基思·约翰·哈奇森

好吧,即使您一次投票也可以,我会很高兴的。我的答案通常是从一两个小时的狩猎和多年的经验中找到的。我的问题不能说相同吗?人真的可以是卑鄙的!:)
Eamonn Kenny '18

4

由于可怕的证书问题,使用' pip install --upgrade pip ' 升级pip 并不总是有效:确认ssl证书时出现问题:[SSL:TLSV1_ALERT_PROTOCOL_VERSION] tlsv1警报协议版本

我喜欢对虚拟环境使用单行命令:

curl https://bootstrap.pypa.io/get-pip.py | python -

或者,如果您想将其安装在宽盒中,则需要

curl https://bootstrap.pypa.io/get-pip.py | sudo python -

如果要在自动化脚本中运行时使输出静音,则可以给curl -s标志。


1

就我而言,这是从Debian Stable中的终端命令行执行的

python3 -m pip install --upgrade pip

1

为了使它对我有用,我必须使用Python命令提示符(在VS CODE的WIN10上)在Python目录中进行深入研究。就我而言,它位于我的“ AppData \ Local \ Programs \ Python \ python35-32”目录中。从现在开始,我执行命令...

python -m pip install --upgrade pip

这很有效,我很好。


1

使用管理员权限打开命令提示符,然后重复以下命令:

python -m pip install --upgrade pip

4
这与某些现有答案不一样吗?
hkchengrex

是的,但是我遇到了问题,当我使用Admin Privileges运行CMD时,问题得到解决。
MRamzan

1

pip版本10有问题。它将显示为错误:

ubuntu@mymachine-:~/mydir$ sudo pip install --upgrade pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

解决方案是在要升级的venv中,然后运行:

sudo myvenv/bin/pip install --upgrade pip

而不只是

sudo pip install --upgrade pip

1

如果您使用venv,则任何更新到pip的安装都将导致升级系统pip,而不是venv pip。您还需要升级pip引导程序包。

  python3 -m pip install --upgrade pip setuptools wheel

在python mailist或pepa上存在一些问题。不幸的是,所有各方都将责任视为not my motoroller问题
dre-hh

0

我已经在C:\ Python \ Python36中安装了Python,因此转到Windows命令提示符并键入“ cd C:\ Python \ Python36”以获取正确的目录。然后输入“ python -m install --upgrade pip”全部好!


0

在Windows 7笔记本电脑上,正确安装最新版本的pip的正确方法是:

python.exe -m pip install --upgrade pip

0

单行Python程序
我发现的最好方法是编写一个单行程序,该程序可以下载并运行官方的get-pip脚本。参见下面的代码。

官方文档建议使用curl下载get-pip脚本,但是由于我在Windows上工作且未安装curl,因此我更喜欢使用python本身来下载和运行脚本。

这是可以使用Python 3通过命令行运行的单行程序:

python -c "import urllib.request; exec(urllib.request.urlopen('https://bootstrap.pypa.io/get-pip.py').read())"

根据安装说明,该行将获取官方的“ get-pip.py”脚本,并使用“ exec”命令执行该脚本。

对于Python2,您可以将“ urllib.request”替换为“ urllib2”:

python -c "import urllib2; exec(urllib2.urlopen('https://bootstrap.pypa.io/get-pip.py').read())"

预防措施
值得注意的是,盲目运行任何python脚本本质上都是危险的。因此,官方说明建议在运行之前下载脚本并进行检查。

就是说,许多人实际上并不检查代码,而只是运行它。这一单行程序使这一过程变得更加容易。


0

我在树莓派上遇到了类似的问题。

问题在于http需要SSL,因此我需要强制它使用https来解决此要求。

sudo pip install --upgrade pip --index-url=https://pypi.python.org/simple

要么

sudo pip-3.2 --upgrade pip --index-url=https://pypi.python.org/simple/


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.