运行 Pip3 ImportError:无法导入名称“main”

运行 Pip3 ImportError:无法导入名称“main”

我想安装 Scipy(已经安装了 Numpy)。我安装了 Python 3.5.1-3 和 OS 以及 IDLE3(3.5.2)。当我在终端中点击

sudo pip3 install scipy

它打印出来

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

我已经尝试重新安装 pip3 并重新启动操作系统,但没有任何变化。pip3 是否在其他人的计算机上运行异常?

答案1

使用python -m pip install而不是pip install

例子:

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

升级后我开始遇到这个问题pip

pip install --upgrade --user pip

pip(resp. ) 可执行文件由您的发行版( Ubuntu 16.04 上的软件包)pip3提供。python-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

破坏性的 pip 提交似乎是:95bcf8c5f6394298035a7332c441868f3b0169f4 “将所有内部 API 移至 pip._internal”进入 pip 18.0。

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

pyenv

但最终,对于严肃的 Python 开发,我建议您使用 pyenv + virtualenv 安装您自己的本地 Python,这样也可以解决这个 Ubuntu 错误:如何使用 apt-get 安装不同的 Python 版本?

答案2

该漏洞是在 pip 10.0.0 中发现的。

在 Linux 中你需要修改文件:/usr/bin/pip:

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

更改为:

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

答案3

numpy 和 scipy 位于所有当前支持的 Ubuntu 版本的默认存储库中。要为 Python 3.x 安装 numpy 和 scipy,请打开终端并输入:

sudo apt update    
sudo apt install python3-numpy python3-scipy  

对于 Python 2.x,它是:

sudo apt update  
sudo apt install --no-install-recommends python2.7-minimal python2.7 # this line is only necessary for Ubuntu 17.10 and later 
sudo apt install python-numpy # 20.04 and earlier
sudo apt install python-scipy # 18.04 and earlier

答案4

虽然 karel 可能已经解决了您的“安装 numpy 和 scipy”问题,但是系统上的 pip 问题尚未解决,因此您在使用 pip 时可能会遇到更多问题。

看着这里,这似乎是 Ubuntu 系统上 pip 10 最近的一个常见问题。您可能会在该线程上找到一些适合您的解决方法,但希望更新能尽快修复它。

相关内容