每当我试图使用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())
它之前工作得很好,我不知道为什么它会抛出这个错误。
我已经搜索了这个错误,但找不到任何方法来修复它。
如果你需要进一步的细节,请让我知道,我会更新我的问题。
使用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)