上条把妹之手 发表于 2018-9-19 09:15:13

ImportError: cannot import name 'main'

每当我尝试使用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())
它之前正常工作,我不知道为什么它会抛出这个错误。我搜索了这个错误,但找不到任何解决方法。

马猴烧酒 发表于 2018-9-19 09:24:22

要恢复pip3你需要的二进制文件sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall。
如果您想继续处于“不受支持的区域”(在系统软件包管理器之外升级系统软件包),可以使用python3 -m pip ...而不是pip3。

I_Like_AI 发表于 2018-9-19 09:25:31

对于Ubuntu家族,Debian,Linux Mint用户
您可以保留原始系统点(在/ usr / bin /和dist-packages /中)并删除手动安装的点(在〜/ .local /中)以解决冲突:
$ python3 -m pip uninstall pip
操作系统都允许使用APT快速安装常见的Python模块(包括numpy),而不需要pip,例如:(
$ sudo apt install python3-numpy python3-scipy具有系统依赖性)
$ sudo apt install python3-pip(Debian-patched pip,略长但无关紧要)
快速语法提醒(请参阅man apt详细信息):(
$ sudo apt update从最新源重新同步Ubuntu包索引文件)
$ apt search <python-package-name> (在所有可用包上进行全文搜索)
$ apt show <python-package-name>(显示详细的包描述)
$ sudo apt install <python-package-name>
带有前缀python-的包名称适用于Python 2; 和前缀python3-的包名称适用于Python 3(例如python3-pandas)。有数千个python包在Debian和Ubuntu中进行集成测试。除非你想按用户级别(pip install --user选项)或virtualenv / venv 安装,否则apt可能就是您所需要的。这些系统包也可以从虚拟环境访问,因为如果你的虚拟环境没有给定模块的副本,虚拟环境将回退到导入时使用系统库。那你自定义安装(带有pip --user)的每用户模块~/.local/lib也将覆盖它们。
请注意,由于这是一个系统范围的安装,因此很少需要删除它们(需要注意操作系统依赖性)。这对于具有许多系统依赖性的包(例如scipy或matplotlib)很方便,因为APT将跟踪并提供所有必需的系统库和C扩展,而使用pip则没有这样的保证。
事实上,对于系统范围的Python软件包,Ubuntu 期望使用APT软件包管理器(而不是sudo pip)来避免破坏操作系统:sudo pip3针对/usr/lib/python3/dist-packagesAPT存储操作系统的同一目录 - 敏感模块。最近的Debian / Ubuntu版本在很大程度上依赖于Python 3,所以它预安装的模块由apt管理,不应该更改。
因此,如果您使用pip3 install命令,请确保它在隔离的虚拟开发环境中运行,例如使用virtualenv(sudo apt install python3-virtualenv),或使用Python3内置(-m venv),或者在每个用户级别(--userpip选项,默认情况下在Ubuntu中提供) pip自2016年起),而不是系统范围的(从不sudo pip3!),因为pip会干扰 APT包管理器的操作,并且当系统使用的python模块意外更改时可能会影响Ubuntu OS 组件

黑崎一护 发表于 2018-9-19 09:28:04

有3种快速解决方法:
•        只需打开一个新的bash会话(新的终端选项卡或类型bash) - 并且pip3 v10可用(请参阅参考资料pip3 -V)。debian的pip3 v8仍然安装但已损坏; 要么
•        $ hash -d pip3 && pip3 -V 用于刷新$ PATH中的pip3路径名的命令。如果debian的pip3 v8已安装但是损坏,使用下面命令
•        $ sudo apt remove python3-pip && hash -d pip3完全卸载debian的pip3 v8 的命令,安装的新pip3 v10。
注意:--user除非你在virtualenv中,否则你总是需要为任何非debian提供的pip 添加标志!(它将python包部署到~/.local/,自2016年起默认使用debian / ubuntu提供的python3-pip和python-pip)。Ubuntu / Debian并不推荐你在virtualenv之外使用系统范围内的pip 10。
更多细节:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100

德国骨科 发表于 2018-9-19 09:28:52

检查pip是否已缓存在另一个路径上,为此,调用$ which pip并检查路径是否与错误中提示的路径不同,如果不同:
$ hash -r
缓存清除后,pip将再次运行。参考:http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory
页: [1]
查看完整版本: ImportError: cannot import name 'main'