在python3不断发展和python2不再维护的趋势下,公司里面的python2代码逐渐地被python3代替。所以在工作中时而需要python2时而需要python3 ,那么一个灵活切换Ubuntu系统默认python版本的方法便成为这个青黄不接阶段的“痒痒挠”!
这里主要是追本溯源的研究一下一个应用程序在Ubuntu怎么被执行的,如果急着想看怎么切换python版本可以直接跳到“3. 使用 update-alternatives 来切换python的默认版本” 。
在Ubuntu的命令行中输入python后,系统将自动地去按顺序寻找环境变量中“PATH”里面列出的目录中名字为python的文件 ,然后执行它 。这个文件将是我们研究怎么切换python版本的入手点。
查看环境变量
echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin一般来说应用都会安装在“usr/bin”或者"usr/local/bin"下,我这里安装在了“usr/bin” 下面 。
用ls -l 看到“usr/bin/python”是个链接文件,我们一路查看下去最终找到了可执行文件的目录“ /usr/local/bin/python3.8”,如下: ls -l /usr/bin/python lrwxrwxrwx 1 root root 24 Sep 2 19:17 /usr/bin/python -> /etc/alternatives/python ls -l /etc/alternatives/python lrwxrwxrwx 1 root root 24 Sep 3 20:10 /etc/alternatives/python -> /usr/local/bin/python3.8 ls -l /usr/local/bin/python3.8 -rwxr-xr-x 1 root root 16691888 Sep 2 18:04 /usr/local/bin/python3.8 “/etc/alternatives/python”引出了本文的重点,update-alternatives指令。 将多个版本加入到alternatives的管理库中,由update-alternatives指令来灵活的选择具体要执行哪个可执行文件,具体操作方法请看下文 。“/usr/bin/python”: 代表环境变量中python的位置 “/usr/local/bin/python3.8”: 代表实际python安装的目录
查看update-alternatives管理库中python的信息 sudo update-alternatives --config python There are 2 choices for the alternative python (providing /usr/bin/python). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/local/bin/python3.8 200 auto mode 1 /usr/bin/python2 100 manual mode * 2 /usr/local/bin/python3.8 200 manual mode Press <enter> to keep the current choice[*], or type selection number:到此输入1或者2就可以灵活的去选择python2和python3了。
选择完之后回看一下python的版本信息来验证着个操作: python --version Python 3.8.0b4