每当我试图使用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())

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

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


当前回答

当我想将系统pip pip3从9.0.1升级到19.2.3时,我也遇到了这个问题。

执行pip3 install——upgrade pip后,pip版本变为19.2.3。但是main()在pip中被移动了。_internal在最新版本中,这会导致pip3失效。

因此,在文件/usr/bin/pip3中,将第9行:from pip import main替换为from pip。_internal导入main。这个问题将被修复,对python2-pip的作用相同。(在Ubuntu 18.04发行版上测试)

根据@Vincent H。的回答

其他回答

在ubuntu 18.04.1 Bionic Beaver中,您需要登出并重新登录(不需要重新启动)以获得适当的环境。

$ sudo apt install python-pip

$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip install --upgrade pip

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

$ exit
<login>

$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)

您一定是无意中升级了您的系统pip(可能是通过sudo pip install pip—upgrade之类的程序)

皮普10。X调整它内部的位置。您看到的pip3命令是由您的包维护者提供的(想必debian基于这里?),而不是由pip管理的文件。

您可以在pip的问题跟踪器上阅读更多有关此的信息

您可能不希望升级您的系统pip,而是使用virtualenv。

要恢复pip3二进制文件,您需要sudo python3 -m pip uninstall pip && sudo apt install python3-pip—重新安装。

如果您想继续在“不受支持的领域”(在系统包管理器之外升级系统包),您可能可以使用python3 -m pip…而不是pip3。

我使用下面的代码来加载一个可能需要安装的模块,从而避免了这个错误(我也得到了这个错误)-使用最新的Python和最新的pip没有问题

try
  from colorama import Fore, Back, Style
except:
  !pip install colorama
  from colorama import Fore, Back, Style

我也有同样的问题,但我已经解决了。这是我的解决方案。 首先,当我运行pip install something时,错误如下所示:

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

因此,我cd到文件/usr/bin/和cat 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())

然后我认为它不在安装路径中。所以我cd到python3-pip,像这样:

cd /.local/lib/python3.5/site-packages/pip

附注:你必须在电脑里按正确的方向输入cd 然后我cat文件来查看差异(你可以使用其他操作来查看代码):

cat __main__.py

我看到了这个:

from __future__ import absolute_import
import os
import sys
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == '':
    # __file__ is pip-*.whl/pip/__main__.py
    # first dirname call strips of '/__main__.py', second strips off '/pip'
    # Resulting path is the name of the wheel itself
    # Add that to sys.path so we can import pip
    path = os.path.dirname(os.path.dirname(__file__))
    sys.path.insert(0, path)

from pip._internal import main as _main  # isort:skip # noqa

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

所以,你能看出区别吗?我可以弄清楚,我必须使该文件与/usr/bin/pip3中的文件相同

因此,我复制了/.local/lib/python3.5/site-packages/pip中的代码来替换/usr/bin/pip3中的代码 问题就消失了!

注:pip3和pip在这个问题上没有区别。 如果我的解决方案解决了你的问题,我会很高兴!

在Debian上,你需要先更新apt ....

sudo apt-get update -qq
sudo apt-get install python-pip -qq
sudo pip install pip --upgrade --quiet
sudo pip2 install virtualenv --quiet

如果你跳过'sudo apt-get update -qq',你的pip将变得腐败,并显示'无法找到主'错误。