Python2和3版本共存

前言

尽管Python官方也说Python2是遗留语言,Python3才是未来:

Python 2.x is legacy, Python 3.x is the present and future of the language

但是有些时候因为一些特殊需求我们可能还是需要用到另一个版本,这时候就需要配置让两个版本共存了。

环境变量

首先我们要先知道环境变量,主要是里面的Path变量。它的意思是,你需要系统运行一个程序但是没有指定程序所在的路径时,系统出了在当前的路径中寻找这个程序之外,还应该道Path中指定的路径去找。

比如,当我们安装了Java、maven或Python之类的程序后,如果没有配置好环境变量,那么打开命令行的位置不是安装路径的bin目录的话,运行相应命令时就会出现:

1
2
'xxx' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

而配置好环境变量之后就可以在非安装目录下运行程序,这就是环境变量Path的用处。

配置Python共存

我电脑上安装了:

  • Python3.6.1(D:\Program Files\Python3.6.1
  • Python2.7.14(D:\Program Files\Python2.7.14

首先,我们把它们的路径都配置到环境变量Path里:

1
D:\Program Files\Python3.6.1\Scripts\;D:\Program Files\Python3.6.1\;D:\Program Files\Python2.7.14\Scripts\;D:\Program Files\Python2.7.14\;

另外,我电脑上还安装了一个Anaconda3,这个在安装时选择了Add Anaconda to my PATH environment variable,就不用自己配置环境变量了。

然后我们打开cmd命令行执行where python:

1
2
3
4
C:\Users\ASUS>where python
D:\Program Files\Python3.6.1\python.exe
D:\Program Files\Python2.7.14\python.exe
D:\ProgramFiles\Anaconda3\python.exe

出现了我们现在安装了的几个Python。

然后,执行python

1
2
3
4
C:\Users\ASUS>python
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

可以看到默认执行的是环境变量里配置的第一个版本

所以,我们只需要给可执行文件取个名字用于区分版本就可以了。具体做法:

  • 在Python3的文件夹里找到python.exe把它ctrl + C然后ctrl + V复制一份,重命名python3.exe
  • 同理,Python2文件夹也复制一份python.exe重命名python2.exe
  • 同样,Anaconda文件夹里的python.exe重命名python-conda.exe

然后测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\ASUS>where python
D:\Program Files\Python3.6.1\python.exe
D:\Program Files\Python2.7.14\python.exe
D:\ProgramFiles\Anaconda3\python.exe

C:\Users\ASUS>where python3
D:\Program Files\Python3.6.1\python3.exe

C:\Users\ASUS>python-conda
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 10:21:59) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

但是,输入python进入的还是默认在环境变量里配置在最前面的版本,我的是Python3.6.1:

1
2
3
4
C:\Users\ASUS>python
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

配置pip共存

对于pip的配置也是同样的方法,只是可以看到在Python2和Python3的Scripts目录下除了pip.exe以外还都已经自带了pip2.exepip3.exe

1
2
3
4
5
6
7
8
9
10
C:\Users\ASUS>where pip
D:\Program Files\Python3.6.1\Scripts\pip.exe
D:\Program Files\Python2.7.14\Scripts\pip.exe
D:\ProgramFiles\Anaconda3\Scripts\pip.exe

C:\Users\ASUS>where pip2
D:\Program Files\Python2.7.14\Scripts\pip2.exe

C:\Users\ASUS>where pip3
D:\Program Files\Python3.6.1\Scripts\pip3.exe

pip有个查看版本的命令pip -V

1
2
3
4
5
6
7
8
C:\Users\ASUS>pip -V
pip 9.0.1 from d:\program files\python3.6.1\lib\site-packages (python 3.6)

C:\Users\ASUS>pip2 -V
pip 9.0.1 from d:\program files\python2.7.14\lib\site-packages (python 2.7)

C:\Users\ASUS>pip3 -V
pip 9.0.1 from d:\program files\python3.6.1\lib\site-packages (python 3.6)

虽然Anaconda有conda命令,不过还是配置一下Anaconda的pip吧。

找到Anaconda安装目录的Scripts目录,复制一份pip.exe重命名为pip-conda.exe

1
2
C:\Users\ASUS>where pip-conda
D:\ProgramFiles\Anaconda3\Scripts\pip-conda.exe

但是,运行pip-conda -V会发现:

1
2
C:\Users\ASUS>pip-conda -V
Script file 'D:\ProgramFiles\Anaconda3\Scripts\pip-conda-script.py' is not present.

有点不一样的是:Anaconda的pip需要查找一份pip-script.py,所以我们还需要复制一份这个重命名为pip-conda-script.py,这时候再运行pip-conda -V

1
2
C:\Users\ASUS>pip-conda -V
pip 9.0.1 from D:\ProgramFiles\Anaconda3\lib\site-packages (python 3.6)

使用pip默认的也是环境变量里最前面配置的版本。

完成

这样,Windows下Python版本共存的配置就完成了。

在Linux下配置的方法也是一样的,使用创建软链接的命令ln -s实现。