Ubuntu内置的Python3.5安装pip模块

本文首先介绍了如何给Ubuntu16.04内置的Python3.5安装pip模块,然后扩展介绍了多版本Python安装对应pip以及对pip对应Python版本进行管理的方法。

问题描述

当我想通过Ubuntu16.04内置的Python3.5的pip安装第三方包时,出现如下错误:

1
2
root@VPS:/home# python3 -m pip install numpy
/usr/bin/python3: No module named pip

问题分析

从错误描述来看,pip包不存在。

我们知道:

  • Debian软件管理器(sudo apt-get install)安装的package存放在 /usr/lib/python2.7/dist-packages目录中
  • Python软件管理器(easy_installpip)安装的package存放在/usr/local/lib/python2.7/dist-packages目录中
  • 手动从源代码安装的package会直接使用目录site-packages

然后我进入到以下目录,看下是否存在pip文件夹:

1
2
3
4
5
root@VPS:/home# cd /usr/local/lib/python3.5/dist-packages/
root@VPS:/usr/local/lib/python3.5/dist-packages# ll
total 8
drwxrwsr-x 2 root staff 4096 Nov 14 08:10 ./
drwxrwsr-x 3 root staff 4096 Nov 14 08:10 ../

发现当前目录是空的,并没有pip,说明并没有装上pip,因此,我们需要手动安装pip

1
2
wget https://bootstrap.pypa.io/get-pip.py
sudo python3.5 get-pip.py

注意:这里的Python3.5根据你Python的版本进行替换

然后查看一下是否安装成功:

1
pip -V

显示下面说明安装成功。

1
pip 19.3.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

然后我们就可以使用pip来安装别的包了:

1
python3 -m pip install XXX

pip版本管理

首先我通过上面的方法安装了Python2.7的pip,此时查看:

1
2
3
4
5
root@VPS:/usr/local/lib/python2.7/dist-packages# pip -V
pip 19.3.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

root@VPS:/usr/local/lib/python2.7/dist-packages# pip2 -V
pip 19.3.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

然后我用同样的方法安装了Python3.5的pip,此时查看:

1
2
3
4
5
6
7
8
root@VPS:/usr/local/lib/python3.5/dist-packages# pip -V
pip 19.3.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

root@VPS:/usr/local/lib/python3.5/dist-packages# pip3 -V
pip 19.3.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

root@VPS:/usr/local/lib/python3.5/dist-packages# pip3.5 -V
pip 19.3.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

然后我用同样的方法安装了Python3.6的pip,此时查看:

1
2
3
4
5
6
7
8
9
10
11
root@VPS:/usr/local/lib/python3.6/dist-packages# pip -V
pip 19.3.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)

root@VPS:/usr/local/lib/python3.6/dist-packages# pip3 -V
pip 19.3.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)

root@VPS:/usr/local/lib/python3.6/dist-packages# pip3.5 -V
pip 19.3.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

root@VPS:/usr/local/lib/python3.6/dist-packages# pip3.6 -V
pip 19.3.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)

我们发现,每次安装pip,它都会把默认pip对应的Python修改,导致pip对应版本混乱

现在系统中安装了Python2.7、Python3.5、Python3.6。各个pip对应的Python版本如下:

  • pip对应Python3.6
  • pip2对应Python2.7
  • pip3对应Python3.6
  • pip3.5对应Python3.5
  • pip3.6对应Python3.6

现在我们想要让pip对应Python2.7,让pip3对应Python3.5

然后我们进入到/usr/local/bin,发现里面有很多pip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@VPS:/usr/local/lib/python3.6/dist-packages# cd /usr/local/bin/
root@VPS:/usr/local/bin# ll
total 52
drwxr-xr-x 2 root root 4096 Dec 15 03:37 ./
drwxr-xr-x 10 root root 4096 Nov 14 08:09 ../
-rwxr-xr-x 1 root root 232 Dec 15 03:37 easy_install*
-rwxr-xr-x 1 root root 232 Dec 15 03:19 easy_install-2.7*
-rwxr-xr-x 1 root root 232 Dec 15 03:20 easy_install-3.5*
-rwxr-xr-x 1 root root 232 Dec 15 03:37 easy_install-3.6*
-rwxr-xr-x 1 root root 219 Dec 15 03:37 pip*
-rwxr-xr-x 1 root root 219 Dec 15 03:19 pip2*
-rwxr-xr-x 1 root root 219 Dec 15 03:19 pip2.7*
-rwxr-xr-x 1 root root 219 Dec 15 03:37 pip3*
-rwxr-xr-x 1 root root 219 Dec 15 03:20 pip3.5*
-rwxr-xr-x 1 root root 219 Dec 15 03:37 pip3.6*
-rwxr-xr-x 1 root root 210 Dec 15 03:37 wheel*

这些pip文件其实是Python脚本文件,我们可以用vim打开pip

1
2
3
4
5
6
7
8
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

这个文件的第一行指定了这个脚本对应的Python版本,如果想把pip对应的Python版本改为2.7的,只需修改Python3.6为Python2.7即可。修改保存后执行:

1
2
root@VPS:/usr/local/bin# pip -V
pip 19.3.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

我们已经成功的把pip对应的Python版本改为了2.7,同理也可以修改pip3对应的版本。

注意:不同版本的pip对应的这个脚本文件的内容不同,上面显示的是pip 19.3.1版本的,其它版本的脚本文件内容可能与之不同。直接改这个脚本文件来修改pip对应的Python版本的前提是:当前脚本文件对应的Python版本与要修改对应的Python版本的pip包版本最好一致,不一致很可能出错。最简单的解决办法是都升级为最新的pip版本

参考


----------- 本文结束啦感谢您阅读 -----------

赞赏一杯咖啡