我在安装软件时在终端中收到一条消息: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
TL;博士
-
"理想"的解决方案(Ubuntu/Debian 方式):
$ python -m pip uninstall pip
卸载新的 pip 10 并保留 Ubuntu/Debian 提供的修补 pip 8。对于系统范围的模块安装,请尽可能使用apt
(除非您在 virtualenv 中),下面将详细介绍。在较旧的 Ubuntu/Debian 版本中,在 virtualenvs 之外使用 pip 时,请务必添加--user
标志(安装到~/.local/
中,自 2016 年以来默认为 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。
- 只需重新打开一个新的 bash 会话(一个新的终端选项卡,或键入
注意:您将始终需要将--user
标志添加到非 debian 提供的 pip 10 中,除非您在虚拟环境中!在 virtualenv 之外,你在系统范围内使用 pip 10 并不是 Ubuntu/Debian 真正支持的。永远不要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 <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 笔记本)$ sudo apt-get install python-pip
(安装/升级 pip 到 Ubuntu 存储库中可用的最新版本 – 通常略微落后于 pypi.org,但没关系)如果您必须在 Ubuntu/Debian 上使用pip install
命令而不是apt-get install
命令,请确保它独立运行并且不会更改默认的系统范围 Python 包(切勿将sudo与 pip 一起使用)
– 更多内容见下文。
导入错误:无法导入名称主
该错误是由pip install --upgrade pip
命令引起的:该命令从操作系统发行版(系统Python安装)python-pip
debian软件包中安装最新的pip版本10以及Ubuntu的默认pip版本,完全绕过Ubuntuapt
子系统。它破坏了 Ubuntu 的默认 pip:来自 python-pip 的 debian 补丁启动器脚本(系统安装到/usr/bin/pip*)尝试从新安装的 pip 10 库中导入 main(),但使用不同的导入路径,因此失败。
pip 问题跟踪器的开发人员线程中更详细地讨论了此错误,包括一些建议的解决方案,例如:
$ hash -d pip
命令:当调用hash
时,pip 的完整路径名是通过搜索 $PATH 中的目录并记住来确定的。任何以前记住的路径名都将被丢弃。-d
选项会导致 shell "忘记"给定包名称的记住位置;或同样,您可以简单地重新打开一个新的 bash 会话(一个新的终端选项卡)以刷新 $PATH 中的 pip 路径名;或者
您可以使用
pip2
命令(或 Python 3 的pip3
)而不是pip
来调用较旧的系统安装的 pip 脚本/usr/bin/pip2
,而位于$HOME/.local/bin
dir 中的任何 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 针对特定 Python 版本的扩展,这将非常方便。仅当在虚拟环境之外使用 pip 时,才需要--user
开关。或者,卸载两个 pip 中的一个 - 用户安装或系统安装 - 以解决冲突:
$ python -m pip uninstall pip
– 从 python-pip debian 包(Python 3 的 python3-pip)中删除手动安装的 pip 以支持以前安装的 Ubuntu 发布版本;它稍旧,但它可以从 PyPI 找到并安装最新的模块,并且默认情况下在$PATH中有一个有效的 pip 命令;或$ sudo apt-get remove python-pip
– 卸载 Ubuntu 提供的 pip 以支持您最新的 pip 10;如果无法通过 shortpip
命令访问它,只需将$HOME/.local/bin
目录添加到 $PATH 环境变量以使用pip
命令(见上文)。
注意:Ubuntu 16.04 pip v8.1.1 和最新的 pip v10.0.1 产生完全相同的 PyPI 索引搜索结果,可以拉取相同的模块版本;最后,你可以完全忽略这两个点,转而支持 APT,并从 Ubuntu repo 在系统范围内安装 Python 包:
$ apt search <python-package>
# 例如
python-pandas$ apt show <python-package>
# 例如 python-flask$ sudo apt install <python-package>
前缀为python-
的包适用于 Python
2;python3-
适用于 Python 3。
通过apt-get进行安装可能是你需要的,事实上,只要有可能,来自Ubuntu存储库的python包是首选,特别是在系统依赖繁重的情况下或在系统范围内使用时。当然,与 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包的依赖。建议永远不要使用 Pip 来更改系统范围的 Python 包,因为这些包由 Ubuntu 上的apt-get
管理。
我暗示了来自 ImportError @catalinpopescu响应:在 windows7 32 位中运行 pip --version 命令时无法导入名称 main
查找点子的路径:
$ 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,它似乎没有此错误。
尝试升级系统 pip
须藤点安装 --升级点子
点安装 --升级点子
这可能很有用