Overview

今天在服务器(Ubuntu 16.04)使用pip安装深度学习包Keras的时候,发现安装结束之后下面有一行提示小字,大约就是pip有新版本可以更新,使用XXX命令更新,就顺带更新了一下,更新完了pip就不能用了...

问题描述

及时是查看下pip的版本

sudo pip --version

也会报下面的错误:

Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

解决方案

差了很多资料,发现是pip新版本的一个bug,跟平台无关,Windows下也会出现这个问题(可以查看这里ImportError: cannot import name main when running pip --version command in windows7 32 bit)。

有3个解决办法:

  1. 直接修复这个bug,算是临时的解决方案。
    vim编辑/usr/bin/pip文件

     sudo vim /usr/bin/pip
    

    可以看到下面的内容

     from pip import main
     if __name__ == '__main__':
         sys.exit(main())
    

    把这部分内容注释掉,换成下面的内容:

    from pip import __main__
    if __name__ == '__main__':
        sys.exit(__main__._main())
    

    重新运行pip,不在报错了。

  2. Windows下的pip安装位置不太熟悉,所以不知道应该在哪里修改这个文件。如果不知道在哪里修改,也可以考虑用python命令讲pip降级到没有bug的版本:

    python -m pip uninstall pip
    python -m pip install pip==9.0.3
    

    这个没试过,不知道行不行。

  3. 也有人说这个bug是由pip的调用方式引起的,在调用pip时,别用:

    pip install <package>
    

    而是改用(python2):

    python -m pip install <package>
    

    或者(python3):

    python3 -m pip install <package>
    

参考文献