每当我试图使用pip安装任何包时,我都会得到这个导入错误:

guru@guru-notebook:~$ pip3 install numpy
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'

guru@guru-notebook:~$ cat `which pip3`
#!/usr/bin/python3
# GENERATED BY DEBIAN

import sys

# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
    sys.exit(main())

它之前工作得很好,我不知道为什么它会抛出这个错误。 我已经搜索了这个错误,但找不到任何方法来修复它。

如果你需要进一步的细节,请让我知道,我会更新我的问题。


当前回答

我在Ubuntu 16.04系统上遇到了同样的问题。我设法用以下命令重新安装pip来修复它:

Curl https://bootstrap.pypa.io/get-pip.py | sudo python3

其他回答

不管怎样,我遇到了pip的问题(不是pip2或pip3):

$ pip -V
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

不知怎么的(我不记得是怎么的了),我在~/中安装了python的东西。本地目录。在我从那里删除pip目录之后,pip又开始工作了。

$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

我在一个系统上运行,我有sudoapt但没有sudopip。(并且没有su访问权限。)我听从了皮普的建议,陷入了同样的境地:

您使用的是pip 8.1.1版本,但是有18.0可用。您应该考虑通过'pip install——upgrade pip'命令进行升级。

其他修复对我都不起作用,因为我没有足够的管理权限。然而,在阅读这篇文章后,有几件事让我印象深刻:

我不应该这么做的。当然,皮普让我这么做的。它撒了谎。 使用——user通过关注仅用户目录解决了许多问题。

因此,我发现这个命令行可以将我恢复到原来的位置。如果您使用的是与8.1.1不同的版本,那么您显然希望更改该行的这一部分。

python -m pip install --force-reinstall pip==8.1.1 --user

这是唯一对我有效的方法,但它非常有效!

你可以试试这个:

sudo ln -sf $( type -P pip ) /usr/bin/pip

使用python3 -m pip install——user pip==9.0.1(或有效的版本)恢复

我们可以通过修改pip文件来清除错误。

检查文件的位置:

$ which pip

路径-> /usr/bin/匹普

转到该位置(/usr/bin/pip)并打开终端

输入:$ sudo nano pip

你可以看到:

import sys
from pip import main
if __name__ == '__main__':
     sys.exit(main())

改变:

import sys
from pip import __main__
if __name__ == '__main__':
     sys.exit(__main__._main())

然后按CTRL + o写入更改并退出

希望这能奏效!!