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

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

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


当前回答

只需一步即可解决。

我也遇到过这个问题,但这可以简单地通过1个命令来解决,而不用打扰和浪费时间,我已经在多个系统上尝试过了,这是这个问题最干净的解决方案。这就是:

对于python3:- sudo python3- m pip uninstall pip && sudo apt install python3-pip——重新安装。

这样,您就可以简单地使用pip3安装包。要检查,请使用pip3——version。

旧版本请使用:sudo python -m pip uninstall pip && sudo apt install python-pip——重新安装。

这样,现在您就可以使用pip简单地安装包了。检查使用PIP——版本。

其他回答

我在Pixelbook上使用新的LXC(拉伸)时也遇到了同样的情况。这个解决方案与公认的解决方案非常相似,只有一个细微的区别,这为我固定了pip3。

sudo python3 -m pip install --upgrade pip

这使版本发生了变化,现在它按预期工作。

我在这里找到的……确保pip是最新的

我也有同样的问题,但我已经解决了。这是我的解决方案。 首先,当我运行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在这个问题上没有区别。 如果我的解决方案解决了你的问题,我会很高兴!

正如@cryptoboy所说-检查你安装的pip/python版本

 demon@UbuntuHP:~$ pip -V
 demon@UbuntuHP:~$ pip2 -V
 demon@UbuntuHP:~$ pip3 -V

然后在.local/lib/文件夹中检查不需要的库。

当我迁移到更新的Kubuntu时,我备份了设置,在我的主目录中有.local/lib/python2.7/文件夹。安装python 3.6。我刚刚删除了旧文件夹,现在一切都很好!

使用python -m pip install代替pip install

例子:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

pip(回应)。pip3)可执行文件由您的发行版(Ubuntu 16.04上的python-pip包)提供,位于/usr/bin/pip.

因此,当您升级pip时,它不能与pip包本身保持最新,并且可能会损坏。

如果你直接使用python -m pip,例如:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

它会遍历你的Python路径,找到pip的最新版本并执行该文件。

它依赖于这样一个事实,即文件可以通过导入执行,但这是一种非常标准的接口类型,因此不太可能比更具黑客性的Debian脚本出错。

然后我建议添加以下别名到你的.bashrc:

pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )

Ubuntu 18.04 /usr/bin/pip3文件:

from pip import main

大概main在某个时候被从PIP中移除了,这就是破坏的原因。

将所有内部api移到pip上。_internal”,它进入了PIP 18.0。

在Ubuntu 16.04中测试,从pip3 9.0.1更新到18.0。

pyenv

然而,最终,对于严肃的Python开发,我只建议你用pyenv + virtualenv安装你自己的本地Python,这也可以解决Ubuntu的这个bug: https://askubuntu.com/questions/682869/how-do-i-install-a-different-python-version-using-apt-get/1195153#1195153

我使用pip3修复错误的方法是:

Sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3

所有的工作原理:

 demon@UbuntuHP:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 demon@UbuntuHP:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 demon@UbuntuHP:~$ pip3 -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

也许新的10.0.1版本的pip没有更新/usr/bin中的二进制文件?(但事实似乎并非如此)

编辑:同样的问题出现在Ubuntu 18.04中。我发现的最佳解决方案是从/home/<user/链接pip二进制文件。Local /bin到/usr/ Local /bin或/usr/bin(取决于你的偏好),如下所示:

ln -sv /home/<user>/.local/bin/pip /usr/local/bin/pip
ln -sv /home/<user>/.local/bin/pip2 /usr/local/bin/pip2
ln -sv /home/<user>/.local/bin/pip2.7 /usr/local/bin/pip2.7
ln -sv /home/<user>/.local/bin/pip3 /usr/local/bin/pip3
ln -sv /home/<user>/.local/bin/pip3.6 /usr/local/bin/pip3.6

注意:将<用户>替换为当前运行用户

相关版本(最新)如下:

3.6版本:

/home/demon/.local/lib/python3.6/site-packages/pip (python 3.6)

2.7版本:

/home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)