如何将pip升级到最新版本?

我使用get-pip.py安装了pip,但在执行pip freeze后出现了以下错误:
    Exception:
    Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
        status = self.run(options, args)
      File "/usr/lib/python2.7/dist-packages/pip/commands/freeze.py", line 74, in run
        req = pip.FrozenRequirement.from_dist(dist, dependency_links, find_tags=find_tags)
      File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 299, in from_dist
        assert len(specs) == 1 and specs[0][0] == '=='
    AssertionError

    Storing debug log for failure in /home/simon/.pip/pip.log

我已经检查过,pip版本1.7是最新的版本。然而,通过使用pip install -U pip命令更新pip并没有成功。我该如何解决这个问题?
    simon@simon-OptiPlex-780:~/Nightybuild$ pip --version
    pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)
    simon@simon-OptiPlex-780:~/Nightybuild$ pip --version
    pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)
    simon@simon-OptiPlex-780:~/Nightybuild$ pip install -U pip
    Downloading/unpacking pip
      Downloading pip-7.1.2-py2.py3-none-any.whl (1.1MB): 1.1MB downloaded
    Installing collected packages: pip
    Successfully installed pip
    Cleaning up...
    simon@simon-OptiPlex-780:~/Nightybuild$ pip --version
    pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)

2使用sudo -H pip3 install --upgrade pip命令进行pip的升级安装。 - moldovean
10个回答

我通常只运行以下命令来升级pip2(默认情况下等同于pip)和pip3
sudo -H pip3 install --upgrade pip
sudo -H pip2 install --upgrade pip

你必须确保升级你想要在命令pip上反应的版本(适用于Python 2或3),并且将其放在最后。
另外,请注意这会保留通过apt-get或任何其他软件包管理器安装的旧版本,但会添加与系统软件包无关的新版本。优先使用pip安装的软件包,但也不应删除apt-get安装的软件包,因为软件包管理器无法知道是否安装了任何pip版本。

5为什么在 sudo -H 中设置主目录很重要? - Léo Léopold Hertz 준영
13@Masi 因为 pip 希望将其下载的文件写入某个位置以进行缓存。它被设计成将这些文件放置在当前用户主目录的子文件夹中。如果你在没有使用 -H 的情况下运行它,它会抱怨,因为它检测到当前设置的主目录(普通用户)与其运行的用户(root)不匹配。如果它将文件写入你的主目录,它们将由 root 拥有,并且作为普通用户你将无法访问它们。因此,在这种情况下它不会缓存这些文件。忽略 -H 不是可怕的,因为 pip 会检测到并警告你。 - Byte Commander
1为什么这两个命令都会覆盖pip命令呢?当我升级pip2时,它并没有升级pip2命令,只是pip命令。 - Yep_It's_Me
@Yep_It's_Me 这是因为 pip 是相对于你所调用的 Python 版本而言的。这就是为什么他的命令分别是 pip2pip3,以调用适当的 Python 版本来更新 pip。明白了吗? - JayRizzo

我认为这个
pip install --upgrade pip

命令不再正常工作。正确的命令应该是:
  • 对于Python 3:

    python3 -m pip install --upgrade pip
    
  • 对于Python 2:

    python2 -m pip install --upgrade pip
    

P.S. 如果你想确保你的其他Python包也是最新的,请按照这里的说明进行操作。


嗨 @david-foerster - JayRizzo
在Linux上,只需使用pip install -U pip(参见升级pip)即可。 - Eido95
2我在更新Docker镜像中的pip时遇到了问题,但这个方法非常有效。 - Cristian Ramon-Cortes
1在Linux Mint上运行得非常好。 - HelloWorld
No module named pip - B. Shea


这是唯一对我有效的方法,因为其他所有方法都需要从shell连接到服务器,而这又会导致相同的错误。 - Alok Rajasukumaran
我在最后一行遇到了问题。我收到了错误消息ImportError: No module named 'setuptools',但是当我运行pip install setuptools时,我得到了Requirement already satisfied: setuptools in... - Toke Faurby

我认为值得一提的是,我在下面所解释的内容是假设你希望pip指向Python 2,而pip3指向Python 3。我之所以提到这一点,是因为当你升级pip3时,它也会接管pip命令。这是一个有些奇怪的约定,因为默认情况下python指向2.x版本,而python3指向3.x版本。话虽如此...
如果你想要在同一台机器上同时拥有最新版本的Python 2.x pip和Python 3.x pip3(使用pip来表示2.x,pip3表示3.x),你需要按照以下步骤进行操作:
sudo apt-get install python-pip python3-pip --yes
sudo python3 -m pip install pip --upgrade --force
sudo python -m pip install pip --upgrade --force # this line associates pip with Python 2

其他人提供的答案没有提到,在运行sudo pip3 install pip --upgrade之后,你将会发现pip命令会安装软件包到Python 3.x目录而不是Python 2.x目录。
我有一部分认为,在升级pip3之后我们应该保持pip不变(即使它变成了pip -> pip3),但这样做存在一个风险,即人们已经期望pip的功能与python相似 - 都指向Python 2.x。换句话说,人们可能已经习惯使用pip/python来处理Python 2.x,就像他们习惯使用pip3/python3来处理Python 3.x一样。

1这对我来说是个大问题,ImportError: cannot import name 'main' - hayd
apt-get update && apt-get install python-pip -y && apt-get upgrade -y && python -m pip install pip --upgrade --force 带来了对我的Python2项目的解决方案。我仍然会尽量坚持使用apt-get,只有在apt-get中不可用或者确实需要时才会使用pip,就像这里一样。apt-get会以最佳方式自动管理您的版本。 - questionto42
@hayd的问题是因为同时安装了python2 pip和python3 pip。这应该被避免,或者如果你确实需要这样做,你总是需要使用sudo python3 -m sudo python2 -m 来运行pip命令,不要再依赖于普通的pip命令,它可能会默认使用你不想要的版本。 - questionto42
在一个Python2项目中,apt-get install --upgrade python-pip -y && python -m pip install --upgrade pip就足够了,不需要--force。我甚至不确定是否需要--upgrade,或许有人可以检查一下。这样做也没有任何伤害,我用过了。我还尽可能地将封装程序更改为apt-get,参见Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-rnhk49o3/opencv-python/,也许这也有点解决的作用。 - questionto42

pip install -U pip

这是我知道的最简单的方法。


-U代表什么? - questionto42

使用以下命令更新pip版本
sudo apt-get update

sudo apt install python3-pip

如果使用pip install -U pip,那么pip首先会卸载自身,并且可能在整个过程中出现停顿。因此,以下方式是安全的:
对于Python 3,请使用python3 -m pip install -U pip 对于Python 2.7(或者在venv内运行的任何Python版本),请使用python -m pip install -U pip

我遇到了同样的错误,并通过以下命令解决了它。
sudo su root
apt-get purge -y python-pip
wget https://bootstrap.pypa.io/get-pip.py
python ./get-pip.py
apt-get install python-pip

ImportError: 找不到模块 packaging.version


apt-get purge -y python-pip 对我来说起作用了。 - Akira Yamamoto

Centos:首先需要安装最新版本的Python(目前为Python 3.8)链接。
[root@centos7 ~]# yum install gcc openssl-devel bzip2-devel libffi-devel -y
[root@centos7 ~]# curl -O https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
[root@centos7 ~]# tar -xzf Python-3.8.1.tgz
[root@centos7 ~]# cd Python-3.8.1/
[root@centos7 Python-3.8.1]# ./configure --enable-optimizations
[root@centos7 Python-3.8.1]# make altinstall

现在已经安装了Python3.8。现在你可以安装最新的pip版本(目前是21.1)。
# python3.8 -m pip install --upgrade pip
# pip3.8 --version
# OUTPUT ==> pip 21.1 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)

对于Ubuntu系统,请使用apt-get而不是yum。

以下命令是在Ubuntu中使用最新可用的pip版本进行升级-
# python -m pip install --upgrade pip

针对特定的pip版本,例如22.0.4,请尝试以下命令-
# pip install pip==22.0.4
# pip --version
pip 22.0.4 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)

这样我们就可以安装任何其他可用的pip版本。