python2与python3共存

大多数情况下,系统已经安装了python,并且默认的 python 版本是 /usr/bin/python2.7

1
2
3
4
5
6
root@nj:~# python -V
Python 2.7.18
root@nj:~# python2 -V
Python 2.7.18
root@nj:~# python2.7 -V
Python 2.7.18

在/usr/bin/目录下可以看到有多个python程序文件,python命令默认指向的是 python2

1
2
3
4
5
6
root@nj:~# ls -al /usr/bin/ | grep "python"
python -> python2
python2 -> python2.7
python2.7
python3 -> python3.9
python3.9

如果没有安装 python3.9,执行以下命令安装

1
apt update && apt install -y python3.9

python3.9版本的使用方法

1
2
3
4
root@nj:~# python3 -V
Python 3.9.2
root@nj:~# python3.9 -V
Python 3.9.2

到这里,系统中就安装了python2 和 python3 两个版本,分别执行 python2.7 和 python3.9 两个命令就可以使用指定的版本,但是使用python命令默认的还是python2.7,如何切换到python3.9呢?

1
2
root@nj:~# python -V
Python 2.7.18
1
2
3
4
5
6
7
8
#将/usr/bin/python2.7优先级设置为1
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

#将/usr/bin/python3.9优先级设置为2
update-alternatives --install /usr/bin/python python /usr/bin/python3.9 2

#使用以下命令切换版本,输入1或2等数字切换
update-alternatives --config python

使用 update-alternatives 命令之后,在/usr/bin/目录下可以看到python的指向位置

1
2
3
4
5
6
root@nj:~# ls -al /usr/bin/ | grep "python"
python -> /etc/alternatives/python
python2 -> python2.7
python2.7
python3 -> python3.9
python3.9

在 /etc/alternatives/ 目录下查看python指向位置

1
2
root@nj:~# ls -al /etc/alternatives/ | grep "python"
python -> /usr/bin/python3.9

切换python2.7与python3.9的效果展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#当未设置python不同版本的优先级时,执行切换命令返回错误提示
root@nj:~# update-alternatives --config python
update-alternatives: error: no alternatives for python

#设置python不同版本的优先级
root@nj:~# update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode
root@nj:~# update-alternatives --install /usr/bin/python python /usr/bin/python3.9 2
update-alternatives: using /usr/bin/python3.9 to provide /usr/bin/python (python) in auto mode

#切换
root@nj:~# update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.9 2 auto mode
1 /usr/bin/python2.7 1 manual mode
2 /usr/bin/python3.9 2 manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in manual mode
root@nj:~# python -V
Python 2.7.18

#1 python2.7
#2 python3.9

pip如何共存呢,安装python3.9后默认指向的是pip3,并且pip2命令是不存在的

1
2
3
4
5
6
7
8
9
10
11
root@nj:~# pip -V
pip 23.1.2 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
root@nj:~# pip3 -V
pip 23.1.2 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
root@nj:~# pip3.9 -V
pip 23.1.2 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)

root@nj:~# pip2 -V
-bash: pip2: command not found
root@nj:~# pip2.7 -V
-bash: pip2.7: command not found

安装pip2

1
2
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py && \
python2.7 get-pip.py

这时pip2和pip3共存,但是默认的版本变成了pip2,并且pip默认版本不会根据python版本的切换而变化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@nj:~# python -V
Python 3.9.2
root@nj:~# pip -V
pip 20.3.4 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

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

root@nj:~# pip3 -V
pip 23.1.2 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
root@nj:~# pip3.9 -V
pip 23.1.2 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)