今天安装代码分析可视化工具RunSnakeRun,用pip3安装老是报错,最后才发现RunSnakeRun在2013年就停止了更新,最新版本为2.0.4,因此只能用python2.7安装。我的电脑上有python2.7和python3.6两个版本,不管用pip还是pip3,都是默认安装在python3.6中,最早使用的python的时候没有注意版本问题,这次不得不仔细看看了。
首先我们要知道我们在terminal上输入python或者python3等命令是如何执行的,输入python后首先在当前目录下查找名为python的文件并执行,如果没有就在当前的用户环境变量中查询,再没有的话就在系统所有用户的环境变量下查询。当前用户的环境变量保存在~/.bashrc
文件中,系统所有用户的环境变量保存在/etc/environment
中,如下:
$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
也可以用env
命令查看,当你不是root时,家目录中的~./.local/bin
也在环境变量中。
$ env | grep PATH
PATH=/home/jiangzhongtao/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
如果你是超级用户,则不含之前的~./.local/bin
。
而python的执行文件保存在/usr/bin
这个环境目录下,可通过cd /usr/bin && ll | grep python
查询。查询发现,该文件夹下有很多python文件的软链接,比如在我的电脑里python和python2都是python2.7的软链接,而python3是python3.6的软链接。在python后输入不同的编号即可使用不同的python,如果你有多个不同的python。也可以自己为不同的python创建不同的软链接以区分。
pip是python的包管理工具,保存在/usr/local/bin
这个环境目录下,可使用pip -V
查看不同pip所关联的python版本。之前我无法在python2.7版本安装就是因为我所有的pip都关联到了python3.6,这里有两种关联方式:
第一种方式是永久更改,首先
vim pip
进入你想更改pip文件中,然后将首行的#!/usr/bin/python
改成你所需要的python版本文件,这个版本文件可以是之前介绍的python位置下的可执行文件本体或其软链接。这一行实际上申明了输入pip时用哪个python执行pip。第二种方式是暂时更改,假如要强制使用python2.7执行pip,输入
python2 -m pip3 install <package>
。这里有一个问题,就是因为不管在/usr/local/bin
目录下pip的编号是多少,包的名字依然是pip,因此使用上面的命令会报错/usr/bin/python2: No module named pip3
,因此如果要强制执行,只能使用python2 -m pip install <package>
。
在第一种方式中可能会报错ImportError: No module named pip._internal
,这里只需要用wget下载文件wget https://bootstrap.pypa.io/get-pip.py
,然后使用python2.7 get-pip.py --force-reinstall
重新安装pip即可。