我想安装 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 最近的一个常见问题。您可能会在该线程上找到一些适合您的解决方法,但希望更新能尽快修复它。