Python2.7.12升级pip至10.0.0后出现ImportError: cannot import name main错误
解决pip升级后
ImportError: cannot import name main的问题 这个问题我碰到好多次了,是pip从8.x升级到10.x版本后常见的兼容性问题,根源在于系统里的pip启动脚本没跟上pip内部结构的变化:
当你用pip install --upgrade pip升级后,pip 10把核心的main函数从原来的pip模块移到了pip._internal子模块里,但系统默认的/usr/bin/pip脚本还是沿用旧的写法from pip import main,自然就会触发导入错误。
下面给你几个靠谱的解决办法,选一个适合你的就行:
办法一:修改系统pip脚本(快速修复)
需要用管理员权限编辑/usr/bin/pip文件,执行:
$ sudo nano /usr/bin/pip
找到原来的这两行:
from pip import main if __name__ == '__main__': sys.exit(main())
把它们改成兼容新旧版本的写法:
try: # 适配pip 10+版本 from pip._internal import main except ImportError: # 兼容旧版pip from pip import main if __name__ == '__main__': sys.exit(main())
保存退出后,再执行pip install ipython应该就正常了。
办法二:用python -m pip替代直接调用pip(官方推荐)
其实官方更推荐用这种方式调用pip,它会直接调用当前Python环境对应的pip模块,完全绕开系统旧脚本的问题。安装ipython直接用:
$ python -m pip install ipython
以后不管pip怎么升级,用python -m pip都不会出现这类脚本不兼容的问题。
办法三:强制重新安装pip,更新系统脚本
如果不想修改脚本,可以强制重新安装pip,让它自动更新系统里的/usr/bin/pip脚本:
$ sudo python -m pip install --upgrade pip --force-reinstall
执行完这个命令后,系统的pip脚本就会被替换成适配pip 10.0.0的版本,之后直接用pip命令就没问题了。
内容的提问来源于stack exchange,提问作者Deba
相关产品推荐
相关产品推荐

