我在终端安装软件时收到了一条消息: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
现在我收到了这个错误:
~$ 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
答案 0 :(得分:6)
&#39;理想&#39;解决方案(Ubuntu / Debian方式):
$ python -m pip uninstall pip
卸载新的pip 10并保留你的Ubuntu / Debian提供的补丁点。对于系统范围的模块安装,尽可能使用apt
(除非你是在virtualenv),更多关于它。在较旧的Ubuntu / Debian版本中,在virtualenvs之外使用pip时总是添加--user
标志(安装到~/.local/
,默认在python-pip和python3-pip自2016年起)。
如果仍然想要专门使用新的pip 10,则有3种快速解决方法:
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,支持你的新点10。 注意:除非你是在virtualenv中,否则你总是需要向非debian提供的pip 10添加--user
标志! 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一般expects使用APT包管理器进行任何系统范围的 Python模块更新/安装(包括pip本身),例如:
$ sudo apt-get update
(从源代码重新同步Ubuntu包索引文件)
$ apt-cache search <python-package-name>
(对所有可用包裹进行全文搜索)
$ apt-cache show <python-package-name>
(显示包装说明)
$ 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而不是pip install
上使用apt-get install
命令,请确保它运行隔离并且不会更改默认的系统范围的Python包(从不使用 sudo with pip) - 更多内容如下。
ImportError:无法导入名称主
该错误是由pip install --upgrade pip
命令引起的:它安装了最新的pip版本10以及来自OS发行版(系统Python安装)的python-pip
debian软件包的Ubuntu默认pip版本,完全绕过Ubuntu apt
子系统。它打破了Ubuntu的默认点:从python-pip(系统安装到/ usr / bin / pip *)的debian-patched启动器脚本尝试从你新安装的pip 10库中导入main(),但是使用不同的导入路径,因此失败。
此问题在pip问题跟踪器的developer thread中有更详细的讨论,包括一些建议的解决方案,例如:
$ hash -d pip
命令:当调用hash
时,通过搜索$ PATH中的目录并记住来确定pip的完整路径名。任何以前记住的路径名都将被丢弃。 -d
选项会导致shell忘记&#34;记住给定包名称的位置;或
同样,你可以简单地重新打开一个新的bash会话(一个新的终端选项卡)来刷新$ PATH中的pip路径名;或
您可以使用pip2
命令(或{3}}用于Python 3)而不是pip3
来调用旧的系统安装的pip脚本pip
,而位于/usr/bin/pip2
dir(pip,pip2,pip2.7)的任何pip启动器脚本都将启动新的用户安装的pip 10版本;
您还可以将版本化的Python命令与$HOME/.local/bin
开关结合使用来运行相应的pip副本,例如:
-m
#default Python 2
$ python2 -m pip install --user SomePackage
#具体是Python 2.7
如果你有几个版本的Python并且需要PyPI的扩展来获得特定的Python版本,那么这很方便。仅当使用pip在virtualenv的外时使用$ python2.7 -m pip install --user SomePackage
开关。
或者,卸载两个点的一个 - user-installed或system-installed - 以解决冲突:
--user
- 从python-pip debian软件包(python3-pip for Python 3)中删除你手动安装的pip,转而支持以前安装的Ubuntu版本;它稍微陈旧一点,但它可以很好地从PyPI中找到并安装最新的模块,默认情况下在$ PATH中有一个有效的pip命令;或
$ python -m pip uninstall pip
- 卸载Ubuntu提供的pip,转而使用最新的pip 10;如果无法通过短$ sudo apt-get remove python-pip
命令访问它,只需将pip
目录添加到$ PATH环境变量中即可使用$HOME/.local/bin
命令(见上文)。
注意: Ubuntu 16.04 pip v8.1.1和最新的pip v10.0.1产生完全相同的PyPI索引搜索结果,可以提取相同的模块版本;
最后,您可以完全忽略两个点,支持APT,并在系统范围内从Ubuntu repo安装Python软件包:
pip
#例如蟒蛇,大熊猫
$ apt search <python-package>
#例如蟒蛇瓶
$ apt show <python-package>
带有$ sudo apt install <python-package>
前缀的软件包适用于Python 2; python-
用于Python 3
通过apt-get进行安装可能就是你所需要的,实际上,只要有可能,来自Ubuntu存储库的python-packages就是preferred,特别是在系统依赖性很大或使用system-wide的情况下。当然,与PyPI(并且只有一个版本)相比,Ubuntu存储库中的Python包数量(数千!)相对较小,因为任何操作系统存储库都略微落后于PyPI版本。但是APT的优势在于所有Ubuntu提供的软件包都在Ubuntu中进行了集成测试,而且apt-get可以自动快速解决C扩展等重度依赖。您将始终获得任何所需的系统库作为apt安装的一部分,但是使用pip,您有no such guarantees
但是,如果您真的需要最新的(或某些较旧的)软件包版本,或者只能在PyPI上找到它,或者需要隔离模块时,APT可能不是一个选项;那么pip确实是比较合适的工具。如果您在Ubuntu而不是python3-
上使用pip install
命令,请确保它在隔离的虚拟开发环境中运行,例如virtualenv(apt-get install
)或内置-in sudo apt-get install python-virtualenv
模块(仅在python3中可用),或者在每个用户级别(venv
命令选项),但不系统范围(从不{{1} }!)。
注意:应该避免使用pip install --user
命令(具有root访问权限),因为它interferes与系统包管理器(apt)的操作可能会影响Ubuntu当系统使用的python模块意外升级时,OS components,特别是依赖于另一个pip包。建议永远不要使用Pip来更改系统范围的Python包,因为这些包由Ubuntu上的sudo pip
管理。
答案 1 :(得分:6)
我实施了来自ImportError: cannot import name main when running pip --version command in windows7 32 bit
的@catalinpopescu回复找到pip的路径:
$ which pip
修改文件(选择您喜欢的编辑器):
$ sudo nano `which pip`
然后修改行@catalinpopescu说: 评论/替换行:
from pip import main
sys.exit(main())
为:
from pip import __main__
sys.exit(__main__._main())
我立即升级到Pip版本10.0.1,看来它没有出现此错误。
答案 2 :(得分:1)
尝试升级系统点
sudo pip install --upgrade pip
pip install --upgrade pip
这可能有用