升级到Python版本2.7.12的pip 10.0.0后"ImportError:无法导入名称main" - 仅安装了一个版本的Python

Deb*_*eba 5 python ubuntu pip python-2.7 ubuntu-16.04

安装软件时,我的终端收到了一条消息: 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
Run Code Online (Sandbox Code Playgroud)

Ale*_* C. 8

TL; DR

  1. '理想'的解决方案(Ubuntu/Debian方式):
    $ python -m pip uninstall pip 卸载新的pip 10并保留你的Ubuntu/Debian提供的补丁点8.对于系统范围的模块安装apt尽可能使用(除非你是virtualenv),更多信息如下.在较旧的Ubuntu/Debian版本中,总是--user在virtualenvs之外使用pip时添加标志(~/.local/自2016年起安装到,默认为python-pip和python3-pip).

  2. 如果您想独占使用新的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.

注意:你总是需要--user为非debian提供的pip 10 添加标志,除非你是在virtualenv!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 <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(安装/升级pip到Ubuntu存储库中的最新版本 - 通常略微落后于pypi.org,但是没关系)
如果你不得不pip install在Ubuntu/Debian上使用命令而不是apt-get install,请确保它运行隔离并且不会更改默认的系统范围的Python包(永远不要使用带有pip的sudo) - 更多内容如下所示.

ImportError:无法导入名称main
该错误是由以下pip install --upgrade pip命令引起的:它python-pip从OS发行版(系统Python安装)中安装了最新的pip版本10以及来自debian软件包的Ubuntu的默认pip版本,完全绕过Ubuntu apt子系统.它打破了Ubuntu的默认点:从python-pip(系统安装到/ usr/bin/pip*)的debian-patched启动器脚本尝试从你新安装的pip 10库中导入main(),但导入不同路径,所以它失败了.

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

  • $ hash -d pip命令:当hash被调用时,PIP的全路径名,通过检索$ PATH念着目录确定.任何以前记住的路径名都将被丢弃.该-d选项使shell"忘记"给定包名称的记忆位置; 要么

  • 同样,您只需重新打开一个新的bash会话(一个新的终端选项卡)来刷新$ PATH中的pip路径名; 要么

  • 您可以使用pip2命令(或pip3Python 3)而不是pip调用旧的系统安装的pip脚本/usr/bin/pip2,而位于$HOME/.local/bindir(pip,pip2,pip2.7)的任何pip启动器脚本将启动新的用户安装的pip 10版本;

  • 您还可以将版本化的Python命令与-m交换机结合使用来运行相应的pip副本,例如:#define
    $ python2 -m pip install --user SomePackagePython 2
    $ python2.7 -m pip install --user SomePackage#specific Python 2.7
    如果您有多个版本的Python并且需要PyPI的扩展,那么这很方便特定的Python版本.在--user当PIP被用来开关仅需要外部的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 repo安装Python包:
    $ apt search <python-package> #eg python-pandas
    $ apt show <python-package> #eg 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确实是比较合适的工具.如果您pip install在Ubuntu上使用命令而不是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包,因为它们是由apt-getUbuntu 管理的.


L. *_*San 6

我实现了来自ImportError的 @catalinpopescu响应:在windows7 32位中运行pip --version命令时无法导入名称main

找到pip的路径:

$ which pip
Run Code Online (Sandbox Code Playgroud)

修改文件(选择您喜欢的编辑器):

$ sudo nano `which pip`
Run Code Online (Sandbox Code Playgroud)

然后修改行@catalinpopescu说:注释/替换行:

from pip import main
sys.exit(main())
Run Code Online (Sandbox Code Playgroud)

至:

from pip import __main__
sys.exit(__main__._main())
Run Code Online (Sandbox Code Playgroud)

我立即升级到Pip Version 10.0.1,看来它没有出现此错误.


小智 1

尝试升级系统pip

sudo pip install --升级 pip

pip 安装 --升级 pip

这可能有用