您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

来自pip import main的<module>中文件“ / usr / bin / pip”,第9行,ImportError:无法导入名称main

来自pip import main的<module>中文件“ / usr / bin / pip”,第9行,ImportError:无法导入名称main

TL; DR 1. 理想的解决方案(Ubuntu / Debian方式): $ python -m pip uninstall pip 卸载新的pip 10并保留Ubuntu / Debian提供的补丁pip8。要在系统范围内安装模块,请apt尽可能使用(除非你在virtualenv中),更多在下面。在较旧的Ubuntu / Debian版本中,–user在virtualenvs之外使用pip时,请始终添加标记(~/.local/自2016年以来,认安装在python-pip和python3-pip中)。

如果你仍然想单独使用新的pip 10,可以使用3种快速解决方法

只需重新打开一个新的bash会话(一个新的终端选项卡,或键入bash)-pip 10可用(请参阅参考资料pip -V)。debian的pip 8仍然安装但已损坏;要么

因此,在这里,我们在Ubuntu 16.04 ec2计算机中安装了Python 2.7.12,并且在尝试使用pip时得到ImportError:无法导入名称main。这是由以下命令引起的:它安装了最新的pip版本10以及OS发行版中的python-pip debian软件包的Ubuntu认pip版本(系统Python安装),完全绕开了Ubuntu 子系统。它破坏了Ubuntu的认pip:来自python-pip(系统安装到/ usr / bin / pip *)的debian修补启动器脚本试图从新安装的pip 10库中导入main(),但使用不同的导入路径,因此失败。pip install –upgrade pipapt

在pip问题跟踪程序的开发人员线程中将更详细地讨论此错误包括一些建议的解决方案,例如:

$ hash -d pip命令:当hash被调用时,PIP的完整路径是由$ PATH搜索的目录和记忆确定。任何先前记住的路径名都将被丢弃。该-d选项使外壳“忘记”给定包名称的记住位置;要么

同样,你可以简单地重新打开一个新的bash会话(一个新的终端选项卡)以刷新$ PATH中的pip路径名;要么

你可以仅使用版本控制的pip2命令(或pip3针对Python 3)而不是pip调用较早的系统安装的启动器/usr/bin/pip2,而$HOME/.local/bindir中的任何pip脚本(pip,pip2,pip2.7)都将调用你的新用户安装的pip 10版本;

你还可以结合使用版本化的Python命令和-m开关来运行适当的pip副本,例如:$ python2 -m pip install --user SomePackage#Python 2 $ python2.7 -m pip install --user SomePackage#特别是Python 2.7 如果你有多个版本的Python并且需要PyPI的扩展,例如作为你的MysqL-python模块MysqLdb)或Flask-MysqL,用于特定的Python版本。–user仅在virtualenv外部需要此开关。

或者,卸载一个两个点子- 无论是用户安装或系统安装 -来解决冲突: $ python -m pip uninstall pip-删除你手动安装的点子有利于从python-PIP Debian软件包以前安装的Ubuntu的版本运(python3- pip for Python 3); 它稍旧一些,但是它可以从PyPI找到并安装最新的模块,并且认情况下在$ PATH中有一个有效的pip命令;或 $ sudo apt-get remove python-pip–卸载Ubuntu提供的pip,以使用最新的pip 10;如果无法通过short pip命令访问它,只需将$HOME/.local/bin目录添加到$ PATH环境变量中以使用pip命令(请参见上文)。 注意:Ubuntu 16.04 pip v8.1.1和最新的pip v10.0.1产生完全相同的PyPI索引搜索结果,并且可以提取相同的模块版本;

最后,你可以完全忽略这两个点,而支持APT,而在Ubuntu仓库中使用以下命令在系统范围内安装Python软件包:$ apt search <python-package> #或apt-cache search在较旧的Ubuntu$ apt show <python-package> #例如python-flask$ sudo apt install <python-package> #或sudo apt-get install 前缀python-为Python 2的软件包;与python3-一起用于python3。 你可能需要标准的apt-get安装方法。例如,在你的情况下:python-MysqLdb-MysqL的Python接口<-MysqLdb的分支==MysqL-python python-flask-sqlalchemy -sql Alchemy支持python-pyMysqL-纯Python MysqL驱动程序 实际上,只要有可能,尤其是在以下情况下,最好使用 Ubuntu存储库中的python-packages 严重的系统依赖性或在系统范围内使用时。当然,与PyPI(只有一个版本)相比,Ubuntu存储库中的Python软件包数量(几千个!)相对较少,因为任何OS存储库都略微落后于PyPI版本。但是APT的好处是,所有Ubuntu提供的软件包都已在Ubuntu中进行了集成测试,加上apt-get可以快速解决诸如C扩展之类的繁重依赖项。作为apt安装的一部分,你将始终获得所需的系统库,但是使用pip则无法保证。 但是,如果你确实只需要最新(或某些较旧)的软件包版本,或者只能在PyPI上找到它,或者需要隔离模块,则APT可能不是一个选择。那么pip确实是更合适的工具。如果必须使用pip installUbuntu上使用而不是的命令apt-get install,请确保它在隔离的虚拟开发环境中运行,例如在virtualenv(sudo apt-get install python-virtualenv)或使用内置venv模块(仅在python3中可用)或在每个用户级别(pip install --user命令选项)运行,但不是系统范围的(从不sudo pip!)。

注意:sudo pip应避免在Ubuntu / Debian上使用命令(具有root用户访问权限),因为它会干扰系统软件包管理器(apt)的操作,并且在意外升级系统使用的python模块时,可能会影响Ubuntu OS 组件,尤其是通过依赖另一个pip包。建议不要使用Pip更改系统范围的Python软件包,因为这些软件包由Ubuntu上的apt-get管理。

其他 2022/1/1 18:16:03 有554人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶