ubuntu18安装pip后出现“ImportError: No module named pip”以及升级pip后出现错误“ImportError: cannot import name main”

安装pip如下:

sudo apt install python3-pip	# install pip3 for python3 
sudo apt install python-pip		# install pip2 for python2

    按照上述方式安装的pip版本是9.0.1,并且安装目录是在/usr/lib/python3.6/dist-packages/pip 和 /usr/lib/python2.7/dist-packages/pip下,然后还可能会出现“ImportError: No module named pip”这样的错误,出现这个错误是因为解释器找不到pip的路径(比较奇怪,明明在dist-packages目录下,怎么会找不到呢?),而目前最新的版本是19.0.3,所以不管有没有遇到这个问题,都最好是手动升级一下pip。

升级pip命令如下:

pip3 install pip -U		# 升级pip3
pip2 install pip -U		# 升级pip2	

    执行上述两条命令后,pip3和pip2都升级了到了19.0.3,并且此时分别安装在~/.local/lib/python3.6/site-packages/pip和python2.7/site-packages/pip目录下,需要注意的是,此时原来的9.0.1版本并没有被删除,只是由于.local目录的路径搜索顺序比/usr/lib要优先,所以现在用的pip是19.0.3的。
    现在问题又来了,使用新版本的pip(如 执行pip3 --version)会出现第二个错误“ImportError: cannot import name main”,这个错误是因为pip3和pip2这两个命令(即/usr/bin/pip3和/usr/bin/pip2两个文件)用的是原来的9.0.1版本的,它里面有一个语句是 from pip import main,但是新版本中的__init__.py中没有定义main函数了,而是又定义了一个__main__模块,所以要使用新版本的pip,只需要改动一下pip2和pip3这两个文件就可以了,以pip3为例如下:

#!/usr/bin/python3
# GENERATED BY DEBIAN

import sys

# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
'''
from pip import main
if __name__ == '__main__':
    sys.exit(main())
'''

# cx 2019/04/29
from pip import __main__
if __name__ == "__main__":
    sys.exit(__main__._main())
# 注意第一行,如果是pip2,就写出/usr/bin/python2, 如果是pip,则写出/usr/bin/python

注意修改pip2和pip3需要sudo权限,然后选择你熟悉的编辑器修改即可。

sudo vim /usr/bin/pip3			# 使用vim编辑器修改pip3文件
sudo gedit /usr/bin/pip3		# 使用gedit编辑器修改pip3文件

至此,pip就已经升级好了。当然为了方便使用,也可以将上述某个文件复制一下,并改名为pip,然后修改第一行为:#!/usr/bin/python,这样就可以使用pip命令了,它会根据系统当前的python环境选择pip2或者pip3


安装ipython:
第一次安装ipython使用的是如下的apt方式:

sudo apt install ipython	# 使用apt安装

发现安装完成后输入ipython命令后,出现“ModuleNotFoundError: No module named ‘IPython’”错误,失败了,于是使用另一种安装方式,用pip安装:

sudo pip install ipython	# 使用pip安装

这回安装好后就可以使用了。后来我查看了一下,apt安装的ipython版本是:5.5.0-1,所以可能需要像修改pip一样,去改一下ipython文件,而用pip安装的则是最新版本:7.4.0,这个版本可以正常使用 。所以后来又sudo apt remove --purge ipython把5.5.0版本卸载了。

这里需要注意一下,其实正确的方法应该是用pip安装的,因为用apt安装的ipython仍然是需要使用ipython库的,只是用pip安装的话,它是将最新的库安装了下来.所以我们可以直接通过pip安装最新版本的ipython,具体可以见我的这一篇博客

你可能感兴趣的:(python,pip安装,pip升级出错,apt,安装ipython出错)