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


21

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

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并重新启动OS,但是它没有改变。pip3和其他人一起工作很奇怪吗?

Answers:


10

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 python-scipy

1
python3-scipy工作得很好。谢谢!
The Invertible Hog Dog

1
另一个答案指出,该答案与根本问题无关,而问题与点子有关。
cjauvin

这是不好的方法……
darkwoolf

26

使用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(相应地pip3)执行是由你的发行版(提供python-pip包在Ubuntu 16.04)。

因此,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

大概mainpip在某个时候被打破的

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

pip39.0.1升级到18.0 后,在Ubuntu 16.04中进行了测试。

en

但是,最终,对于认真的Python开发,我只建议您使用pyenv + virtualenv安装自己的本地Python,这也可以解决Ubuntu的错误:如何使用apt-get安装其他Python版本?


1
所以这行得通,但我不能成为唯一在这里摇头的人。故障在哪里?为什么默认点升级无法以继续工作的方式设置新点?
史蒂文·卢

@StevenLu我的理解是,它/usr/bin/pip是由Ubuntu Python包提供的,pip不会覆盖它。但是,它pip update是由pip自己管理的,并且避免接触Ubuntu文件。
Ciro Santilli新疆改造中心法轮功六四事件

嗨,浩在这里也有同样的经历。无论我做什么,Pip3都不起作用。这个解决方案有效,但是怎么来的呢?python pip脚本由Debian-注释编写: 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. 也许有一种方法可以以python方式正确安装Python。

@will我不确定该文档的注释,但我确定它的代码是/usr/bin/pip:-)
Ciro Santilli新疆改造中心法轮功六四事件

20

该错误位于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())

团队似乎不建议采用这种解决方法pip
jdk1.0 '18年

你救了我的一天!
萨拉·辛格

8

我遇到了同样的问题,但是使用apt和pip卸载并重新安装对我来说不起作用。

我看到了另一个解决方案,它提供了一种恢复pip3路径的简便方法:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

这将我的pip3版本从19.0.3降级到8.1.1,但是确实解决了该症状。
Hawkeye Parker

6

尽管karel可能已经解决了您的“安装numpy和scipy”问题,但系统上的pip出了什么问题尚未得到解决,因此您可能会遇到更多pip问题。

这里看,这似乎是Ubuntu系统上pip 10的一个非常普遍的近期问题。您可能会在该线程上找到一些适合您的解决方法,但希望有更新可以尽快解决。


感谢您对实际解决问题,而不是让一个变通办法,只有解决了这个问题部分以及只有一个人......
迦勒芬顿

2

从apt和pip本身安装pip可能会导致这种情况。

就我而言,我使用Ubuntu的pip软件包安装pipenv,然后安装了较新的pip副本。现在,由于我的外壳程序运行Ubuntu的pip 9脚本(以验证run which pip3),然后我的Python解释器导入pip 10模块,因此pip3命令失败。所以我想卸载两者之一。

公平地假设您有新点子是有原因的。在这种情况下,您想像这样卸载旧的点:

sudo apt remove python3-pip

如果您确定对较旧的pip感到满意,并且希望使用系统软件包,则可以卸载较新的软件包:

~/.local/bin/pip3 uninstall pip

或失败

sudo /usr/local/bin/pip3 uninstall pip


1

类型

hash -d pip3

这应该消除此错误


3
您能否对答案给出更多解释:什么是“哈希”,为什么它会消除错误?
Marc Vanhoomissen

1

强制重新安装pip对于大多数用户来说都可以正常工作,如以下 github页面所示:

python -m pip install --force-reinstall pip

谢谢。先前的所有答案都惨败,而您的答案却奏效
皮钦亚

0

我的问题最终是python3.6和3.7之间的不匹配。/usr/bin/python3 -> /usr/bin/python3.6即使系统已升级到python3.7 ,python3.6的安装也会插入一个链接。

sudo apt purge python-pip
sudo apt purge python3-pip
sudo apt install python3.7 --reinstall
cd /usr/bin
sudo rm python3
sudo ln -s python3.7 python3
python3 --version
pip3 --version

-1

这为我工作:

pip install --upgrade --user pip

通过install --upgrade,我的意思是无论您尝试安装什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.