查看: 2147|回复: 4

ImportError: cannot import name 'main'

[复制链接]

5

主题

41

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2018-9-19 09:15:13 | 显示全部楼层 |阅读模式
每当我尝试使用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

  1. import sys

  2. # Run the main entry point, similarly to how setuptools does it, but because
  3. # we didn't install the actual entry point from setup.py, don't use the
  4. # pkg_resources API.
  5. from pip import main
  6. if __name__ == '__main__':
  7.     sys.exit(main())
复制代码

它之前正常工作,我不知道为什么它会抛出这个错误。我搜索了这个错误,但找不到任何解决方法。
回复

使用道具 举报

22

主题

107

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2018-9-19 09:24:22 | 显示全部楼层
要恢复pip3你需要的二进制文件sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall。
如果您想继续处于“不受支持的区域”(在系统软件包管理器之外升级系统软件包),可以使用python3 -m pip ...而不是pip3。
回复

使用道具 举报

15

主题

97

帖子

310

积分

论坛管理

Rank: 4

积分
310
发表于 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 组件
回复

使用道具 举报

13

主题

53

帖子

131

积分

注册会员

Rank: 2

积分
131
发表于 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
回复

使用道具 举报

4

主题

37

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表