多版本Python环境的搭建

前言

众所周知,目前主流Python仍然是2和3两个分支并行发布的,而在这两版本中,又有不同的迭代版本,虽然说新老版本之间的差别很小,但是其所对应支持的库版本可能不一致,更复杂的是各种库之间的相互依赖关系。这就导致了我们为了满足不同Python项目的要求,不得不在我们的系统中装多个版本的Python,这样一来如何在一个系统上管理多个Python版本,使其不会相互影响就显得十分重要。

使用分支版本区分Python2和Python3

当前在大多数Linux系统上(如Ubuntu),都已经默认安装上了Python2和Python3,为了区分他们,我们在终端使用“python2 xx.py”来执行用Python2写的程序,使用“python3 xx.py”来执行用Python3写的程序。同样我们使用pip2和pip3来区分安装Python2和Python3版本的库。

注意在Ubuntu系统上安装pip3的需要指定版本,安装pip3命令为:

1
sudo apt-get install python3-pip

pip2的安装命令为:

1
sudo apt-get install python-pip

在Ubuntu上可以同以下命令来查看python的路经:

1
which python

在Windows系统安装python时,可能无法使用“python2”和“python3”来区分,因为在bin目录下只有“python.exe”而没有“python2.exe”或者“python3.exe”,所有我们直接手动修改python可执行文件文件明,加入版本号即可。

Windows下使用py.exe

当Windows下同时安装了Python2和Python3时,可以使用在Python3目录下的工具py.exe来执行Python程序。在其后面执行版本号即可调用不同版本的Python。

Python2为:

1
py -2 xx.py

Python2为:

1
py -3 xx.py

如果你嫌在执行时加入参数麻烦,可以在Python程序的开头加入如下行来指定时调用python2还是python3解释器:

1
#! python3

后面就直接使用py而不用加参数了。

使用conda管理多版本

当我们不只满足区分Python2和3这两个大版本,还要区分跟细的版本如:python3.4,python3.5,以及一些库的版本时,使用上面的方法可能管理就有不方便了,特别是要避免不同版本的库相互影响很困难。这个时候最后使用那些python多版本管理工具。常用的有:

  • pyenv
  • virtualenv
  • conda

这些管理工具实际上都时重新安装独立的Python和需要的库,让将这些环境各自隔离开来,并提供相应的管理和切换和接口命令。

conda是Anaconda提供的管理工具,可以把conda看作是pip + virtualenv + PVM(Python Version Manager) + 一些必要的底层库。由于我安装了Anaconda环境,所以就直接使用它提供的conda。如果不想安装整个Anaconda而只想用conda工具,则可以直接下载其简化版Miniconda。

注意在直接在官方下载地址下载Anaconda时,可能其下载速度十分的缓慢,我们可以选在国内的清华大学 TUNA下载镜像源来下载。

1.创建和删除一个Python环境

使用conda创建一个Python版本的环境命令如下(指定名字为test_env为版本2.7),第二命令为复制其他环境的配置:

1
conda create -n test_env python=2.7


1
conda create --name test_env --clone root

移除环境命令为:

1
conda remove -n test_env --all
2.Python环境切换

进入test_env环境:

1
source activate test_env

退出test_env环境:

1
source test_env

在Windows上以上命令不需要加source

3.包管理和信息查看

通过conda安装库包,先进入某个环境,然后:

1
conda install pandas

或指定环境

1
conda install -n env_name pandas

卸载包:

1
conda remove pandas

查找包:

1
conda search pyqtgraph

查看包信息:

1
2
3
conda list
# 指定查看某环境下安装的package
conda list -n test_env

显示通过conda已经安装的环境:

1
conda env list
Compartir