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

Raj*_*mon 85 upgrade python pip

我使用 安装了 pip get-pip.py,但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
Run Code Online (Sandbox Code Playgroud)

我已经检查过 pip 1.7 版是最新的。但是,通过更新 pippip 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)
Run Code Online (Sandbox Code Playgroud)

Byt*_*der 91

我通常只运行以下命令来升级pip2(=pip默认情况下)和pip3

sudo -H pip3 install --upgrade pip
sudo -H pip2 install --upgrade pip
Run Code Online (Sandbox Code Playgroud)

您必须确保最后升级要对pip没有数字的命令做出反应的版本(对于 Python 2 或 3)。

另请注意,这会保留通过apt-get或任何其他包管理器安装的旧打包版本,但会添加与系统包无关的新版本。该pip-installed包将是首选,但你不应该删除apt-get任何-installed的,因为包管理器无法知道,任何pip版本的安装,否则。

  • @Masi 因为`pip` 想将其下载的文件写入某处以缓存它们。它的实现是将它们放在当前用户主目录的子文件夹中。如果你在没有 `-H` 的情况下运行它,它会抱怨,因为它检测到当前设置的主目录(普通用户)与它作为(root)运行的用户不匹配。如果它在您的主目录中写入文件,它们将归 root 所有,您将无法再以普通用户的身份访问它们。因此,在这种情况下它不会缓存文件。省略 `-H` 并不可怕,因为 `pip` 会检测到它并警告你。 (13认同)
  • 为什么在 `sudo -H` 中设置 home 很重要? (5认同)

Foa*_*oad 53

我觉得

pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)

命令不再正常工作。正确的命令应该是:

  • 我在从根目录(在 Docker 镜像中)更新 pip 时遇到了问题,这非常有效。 (2认同)

小智 7

转到网站https://pypi.python.org/pypi/pip

复制(或下载)源链接(以 结尾.tar.gz)。

对于 9.0.1,链接是https://pypi.python.org/pypi?:action=show_md5&digest=35f01da33009719497f01a4ba69d63c9

安装程序:

wget Link goes here
tar -xzvf pip-9.0.1.tar.gz
cd pip-9.0.1
sudo python3 setup.py install
Run Code Online (Sandbox Code Playgroud)

版本应更改为最新版本,链接可以更新为最新版本的链接。

这应该有效。


小智 5

我认为值得一提的是,我在下面要解释的是,如果您希望pip指向 Python 2,而pip3指向 Python 3。我提到这一点的原因是因为当您升级 pip3 时,它也会接管 pip 命令作为好。这是一个有点奇怪的约定,因为默认情况下python指向 2.x 而python3指向 3.x。话虽如此...

如果你想让最新版本的python 2.x pip和python 3.x pip3在同一台机器上共存(2.x使用pip,3.x使用pip3),你需要执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

其他人提供的其他答案没有提到在运行sudo pip3 install pip --upgrade后,您最终会使用pip命令在 python 3.x 目录而不是 python 2.x 目录中安装软件包。

我的一部分认为我们应该在升级 pip3 之后离开 pip(即使它是 pip -> pip3),但存在一种危险,即人们已经期望 pip 像 python 一样运行——两者都指向 python 2.x。换句话说,人们可能被训练为在 python 2.x 中使用pip/python,就像他们被训练为在 python 3.x 中使用pip3/python3 一样