安装软件时,我的终端收到了一条消息:You are using pip version 8.1.1, however version 10.0.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
所以我升级了pip版本:$ pip install --upgrade pip
现在我收到此错误:
1 2 3 4 5
| ~$ pip install ipython
Traceback (most recent call last):
File"/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main |
-
你检查过这个stackoverflow.com/questions/43675074/吗?
-
是啊。 我的Python版本是2.7.12。 这适用于Python 3.6。 我是初学者。 那么我应该使用python 3.6的第一个解决方案吗?
-
@AfsanAbdulaliGujarati:是的......这对我没用。
-
@AfsanAbdulaliGujarati:我的Python版本是2.7.12。 适用于Python 3.6的解决方案。
-
对不起,我无法复制这个问题,但我建议,看看github.com/pypa/pip/issues/5240和pip.pypa.io/en/stable/installing看看是否有任何问题 这些解决方案适合您。
-
@AfsanAbdulaliGujarati:使用pip2而不是pip。 这对我有用。 Donno将来会发生什么。:(
-
你的系统上安装了多个python吗? 我的意思是2和3?
-
可能重复的Python pip3 - 无法导入名称'main'
我实现了来自ImportError的@catalinpopescu响应:在windows7 32位中运行pip --version命令时无法导入名称main
找到pip的路径:
修改文件(选择您喜欢的编辑器):
然后修改行@catalinpopescu说:
评论/替换行:
1 2
| from pip import main
sys.exit(main()) |
至:
1 2
| from pip import __main__
sys.exit(__main__._main()) |
我立即升级到Pip Version 10.0.1,看来它没有出现此错误。
-
如果我没记错的话,我想我也必须重新安装pip
-
不幸的是,它可能会产生未来pip版本的问题(它们将从pip._internal导入,之后再次更改),或者在Ubuntu升级时被覆盖。整个问题是因为主流pip从未真正支持从self进口,造成冲突 升级后使用Debian版本。 最强大的方法是卸载已安装的2个点(主流或debian); 否则,只需重新打开一个新的Bash会话(终端)就足以让错误消失。
TL; DR
'理想'解决方案(Ubuntu / Debian方式):
$ python -m pip uninstall pip卸载新的pip 10并保留你的Ubuntu / Debian提供的补丁点8.对于系统范围的模块安装,尽可能使用apt(除非你是virtualenv),下面有更多内容。在较旧的Ubuntu / Debian版本中,在virtualenvs之外使用pip时总是添加--user标志(自2016年起安装到~/.local/,默认为python-pip和python3-pip)。
如果您仍想独占使用新的pip 10,则有3种快速解决方法:
只需重新打开一个新的bash会话(一个新的终端选项卡,或键入bash) - 并且pip 10变为可用(参见pip -V)。 debian的pip 8仍然安装但是坏了;要么
$ hash -d pip && pip -V刷新$ PATH中的pip路径名。 debian的pip 8仍然安装但是坏了;要么
$ sudo apt remove python-pip && hash -d pip(对于Python 3,它是python3-pip) - 完全卸载debian的pip 8,支持你的新pip 10。
注意:除非你在virtualenv中,否则你总是需要将--user标志添加到非debian提供的pip 10中! Ubuntu / Debian并不真正支持您在virtualenv之外使用系统范围内的pip 10。永远不会sudo pip!
细节:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100
Ubuntu 16.04 with Python 2.7.12
介绍:
具有讽刺意味的是,尽管pip本身建议在终端中明确地通过pip install --upgrade pip命令进行这样的升级(呃!),但不建议在预先打包的GNU / Linux发行版中进行升级。 Ubuntu通常希望使用APT包管理器来进行任何系统范围的Python模块更新/安装(包括pip本身),例如:
$ sudo apt-get update(从源代码重新同步Ubuntu包索引文件)
$ apt-cache search (对所有可用包裹进行全文搜索)
$ apt-cache show (显示包装说明)
$ sudo apt-get install python-numpy python-scipy python-matplotlib(轻松安装重型数据科学模块,自动解决所有系统依赖性)
$ sudo apt-get install ipython(安装你正在寻找的IPython-notebook)
$ sudo apt-get install python-pip(安装/升级到Ubuntu存储库中可用的最新版本 - 通常略微落后于pypi.org,但没关系)
如果您必须在Ubuntu / Debian而不是apt-get install上使用pip install命令,请确保它运行隔离并且不会更改默认的系统范围的Python包(永远不要使用带有pip的sudo) - 更多内容如下所示。
ImportError:无法导入名称main
该错误是由pip install --upgrade pip命令引起的:它从操作系统发行版(系统Python安装)的python-pip debian软件包中安装最新的pip版本10和Ubuntu的默认pip版本,完全绕过Ubuntu apt子系统。它打破了Ubuntu的默认点:从python-pip(系统安装到/ usr / bin / pip *)的debian-patched启动器脚本尝试从你新安装的pip 10库中导入main(),但导入不同路径,所以它失败了。
在pip问题跟踪器的开发人员线程中更详细地讨论了此错误,包括一些建议的解决方案,例如:
$ hash -d pip命令:当调用hash时,通过搜索$ PATH中的目录并记住来确定pip的完整路径名。任何以前记住的路径名都将被丢弃。 -d选项使shell"忘记"给定包名称的记忆位置;要么
同样,您只需重新打开一个新的bash会话(一个新的终端选项卡)来刷新$ PATH中的pip路径名;要么
您可以使用pip2命令(或pip3 for Python 3)而不是pip来调用旧的系统安装的pip脚本/usr/bin/pip2,而任何pip启动器脚本位于$HOME/.local/bin dir(pip,pip2) ,pip2.7)将启动新的用户安装的pip 10版本;
您还可以将版本化的Python命令与-m开关结合使用来运行相应的pip副本,例如:
$ python2 -m pip install --user SomePackage #default Python 2
$ python2.7 -m pip install --user SomePackage#特别是Python 2.7
如果你有几个版本的Python并且需要PyPI的扩展来获得特定的Python版本,那么这很方便。仅当在virtualenv之外使用pip时才需要--user开关。
或者,卸载两个点中的一个 - 用户安装或系统安装 - 以解决冲突:
$ python -m pip uninstall pip - 从python-pip debian软件包(python3-pip for Python 3)中删除你手动安装的pip,转而支持以前安装的Ubuntu版本;它稍微陈旧一点,但它可以很好地从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 repo中使用以下系统安装系统范围内的Python包:
$ apt search #例如Python - 熊猫
$ apt show #例如Python瓶
$ sudo apt install
前缀为python-的软件包适用于Python 2; python3-用于Python 3。
通过apt-get进行安装可能就是您所需要的,实际上,只要有可能,就会优先使用Ubuntu存储库中的python-packages,特别是在系统依赖性较大或系统范围内使用时。当然,与PyPI(并且只有一个版本)相比,Ubuntu存储库中的Python包数量(数千!)相对较小,因为任何操作系统存储库都略微落后于PyPI版本。但是APT的优势在于所有Ubuntu提供的软件包都在Ubuntu中进行了集成测试,而且apt-get可以自动快速解决C扩展等重度依赖。作为apt安装的一部分,您将始终获得所有必需的系统库,但是使用pip,您没有这样的保证。
但是,如果您真的需要最新的(或某些较旧的)软件包版本,或者只能在PyPI上找到它,或者需要隔离模块时,APT可能不是一个选项;那么pip确实是比较合适的工具。如果在Ubuntu上使用pip install命令而不是apt-get install,请确保它在隔离的虚拟开发环境中运行,例如virtualenv(sudo apt-get install python-virtualenv)或内置的venv模块(在python3中可用)仅限),或按用户级别(pip install --user命令选项),但不是系统范围(从不sudo pip!)。
注意:应该避免使用sudo pip命令(具有root访问权限),因为它会干扰系统包管理器(apt)的操作,并且当系统使用的python模块意外升级时可能会影响Ubuntu OS组件,尤其是依赖项另一个点子包。建议永远不要使用Pip来更改系统范围的Python包,因为这些包由Ubuntu上的apt-get管理。
好。
尝试升级系统点
sudo pip install --upgrade pip
pip install --upgrade pip
这可能很有用
-
我没有使用pip2得到这个错误。 后来我安装了Python 3.6.4。 现在我不再收到错误了。
-
这不起作用。 点不会执行。 所以pip install -upgrade不会运行。 (使用安装了Py 2.7的ms Ubuntu)。 也许我应该卸载它并切换到3。