Python-Vers Management
Foreword
设想 –> 场景一:A 项目是一个爬虫项目,需要用到 requests、pyspider、scrapy 等包或框架;B 项目是一个 GUI 界面项目,需要用到 GUI 相关的包或库;这需要把所有用到的包安装到原生 Python 环境中,开发环境越来越臃肿。场景二:C 项目是一个 Python2.x 项目;D 项目是一个 Python3.x;两项目要求的 Python 版本不兼容。怎么办?!!
前面提到过一个系统中是可以同时存在多个 Python 版本的,它可以完美的解决上述问题,但是你需要注意新添加的 Python 环境对系统既有环境的影响,这就涉及到系统中 多个 Python 版本的管理 问题。
更多 Python 版本管理以及运行环境相关内容,请关注博主相关博文系列:
之一 >>> Python-Vers Management
之二 >>> Pythoner 神器之 virtualenv
之三 >>> 一文了解数据科学神器 Anaconda
之四 >>> Jupyter Tutorial
Python-Vers Introduction
目前,Python 有两个主流的版本:
分别为:2.x 版本 和 3.x 版本。
Python 3.0 是一次重大的升级,为了避免引入历史包袱,Python 3.0 没有考虑与 Python 2.x 的兼容(不完全兼容),这也就导致很长时间以来,将现有应用从 Python 2.x 迁移到 Python 3.x 是一项不小的挑战。
虽说有 2to3 之类的转换工具可以进行代码的自动转换,但无法保证转换后的代码 100% 正确。而且,如果不做人工修改的话,转换后的代码性能可能还不如转换前。故很多 Python 2.x 的用户不愿意升级到 Python 3.0。
2.x & 3.x 版本的不兼容,引发如下问题:
我们给出一种实际情况 >>>> 原生 Unix/Linux 系统已经自带有一个版本的 Python2,但它不是我们需要的 Python 版本,我们想要编译安装满足我们期待的 Python 版本(Python3)。
此时,我们将面临一种选择:是在原有版本基础上 Update(2.x –> 3.x) 呢?还是去 Setup 一个新版本的 Python(原生版本 Python 也保留)?
Update 存在的问题 >>>>
事实上,由于 Python 2.x 和 Python 3.x 兼容性问题,将 Python 2.x 直接升级到 Python 3.x 会产生一些问题(例如:Centos 系统下的很多工具(yum、iotop 等)都依赖原生 Python 2.x 版本),直接升级后会导致无法使用。
Solution >>>>
所以,一般建议安装添加一个新版本的 Python(与系统原生 Python 版本共存),或者使用虚拟环境管理工具(Virtual Envs Tools)进行多版本管理(这里不用深究,Virtual Envs Tools 是一种优秀的 Python 多版本共存管理方案)。
多版本共存管理方案
正如博文前言场景二中所描述,实际 Python 开发过程中,多 Python 版本开发环境是我们必然要面对的问题。
关键在于:如何保证多个 Python 版本安装、配置以及使用之间互相不产生影响呢?
这就是当前小节讨论的内容,这里会对网络上主流的几种方案进行试验、分析。你可以根据自身情况选择一个适合开发场景的解决 Python 多版本共存冲突问题的解决方案。
Using Symbolic Link
一个简单、快捷的解决多版本冲突问题的方案 >>>> 构建软链接
核心思想 >>>> 在系统原生 Python 版本的基础上,再安装(Add)一个新的期望版本的 Python 环境,且保证新安装 Python 不会影响原生环境,以实现期望版本和原生版本完美共存。
For Unix & Linux Platform
实际上,在介绍 Unix & Linux 平台下安装 Python 时,已经给出了具体的解决方法:
1 –> 源码编译安装
注意在使用源码安装过程中,不要勾选有关自动添加环境变量的选项(默认不勾选),安装成功后手动设置即可,否则会影响原生环境。
安装步骤见前面系列博文,这里不再赘述。
2 –> 构建软链接
Unix && Linux 下可以通过构建多个带有不同版本标识的 Python 软链接:
注意,为了避免不小心覆盖掉系统中原生的 Python 软链接,如:
/usr/local/bin/pythonX
或/usr/bin/pythonX
,构建前最好先查询一下。
1 | 产生软连接时要注意系统中已存在的 Python 软链接,防止原生 Python 调用被覆盖掉!!! |
创建软链接后,在使用 Python 时,我们就可以通过特定软链接启动相应版本的 Python 解释器了:
1 | 启动系统原生环境: |
For Windows Platform
那么 Windows 下如何实现呢???Windows 下是通过设置环境变量来达成的。
1 –> 二进制包安装
注意在使用二进制包安装过程中,不要勾选有关自动添加环境变量的选项(默认不勾选),安装成功后手动设置即可,否则会影响原生环境。
安装步骤见前面系列博文,这里不再赘述。
2 –> 配置系统环境变量
推荐修改系统环境变量(PATH)中设置的 Python 安装目录路径即可,想用那个版本就指向那个版本。
思考:可能有些同学会将多个 Python 安装目录同时添加到系统的环境变量中,以期待可以同时使用多个版本的 Python。这是有问题的,系统搜索程序或可执行文件的路径($PATH)是具有优先级的!,路径在系统 PATH 变量中设置(位置)越靠前,越先被检索到使用。
================================================
至此,我们就可以在当前系统中同时存在多个 Python 版本供我们选择使用!
使用软链接 实现多版本冲突问题存在一定的缺陷:
- 不进行特殊安装、配置记录的话,一段时间后,容易引发系统中的 Python 版本管理混乱;
- Windows 下各版本 Python 环境切换繁琐,并且极易发生库管理混乱问题;
- 需要开发人员手动进行 Python 版本的管理,很繁琐。
那有没有更好的 Python 多版本共存的解决方案???
答案肯定是有的!!!
Virtual Envs Tools(Recommended)
除了上述给出的方法外,虚拟环境管理工具 是一种完美解决 Python 的多版本共存问题的最优解决方案。
什么是虚拟管理工具?
Python 的正式学习之后,相信你肯定会对 “Python 实现其强大功能的前提,就是它具有数量庞大且功能相对完善的标准库和第三方库。通过对库的引用,能够快速实现对不同领域业务的开发。” 有比较深入的理解。
1 –> 为什么引入虚拟环境管理工具?
引入虚拟环境管理工具 –> 可以帮助你完美解决:
- 不同学习、开发项目对 Python 环境的要求不同(可能使用 Python2.x,可能使用 Python3.x);
- 配合包管理工具(Pip),管理以及维护 Python 中数量庞大的标准库和第三方库,这是复杂也是重要的!
2 –> 虚拟环境管理工具可以做什么?
- Virtual Envs Toos 可以创建任意多个虚拟环境(可以看作成一个个容器),使用时指定到(切换到)某一虚拟环境之后 Pip 安装的包、库就只会在这个环境(容器)下;并且各虚拟环境(容器)之间,以及虚拟环境和系统原生环境之间是隔离的(一个个相互独立、隔离的容器)。
- 假设某一个虚拟环境预计不再使用,可以直接删除掉相应虚拟环境,由于虚拟环境的独立、隔离性,不用关注文件残留、关联问题。
通俗来说,Virtual Envs Toos 可以为每个 Python 项目,甚至每个脚本各自建立一套 “独立、隔离” 的 Python 环境(环境中可以自定义特定的 Python 版本以及特定的依赖库)。NB~~~
virtualenv && conda
这里给出两种用于解决 Python 多版本共存冲突问题的虚拟环境管理工具(神器):
- virtualenv
- conda
virtualenv & conda 都可以进行虚拟隔离环境管理,但两者之间也存在一定的 区别:
- 准确来说,virtualenv 仅仅是虚拟环境管理器,conda 相当于:virtualenv(虚拟隔离环境) + pip(包管理工具),也就是说 conda 同时具有虚拟环境管理和包管理的功能;
- 作为包管理器,pip 只能安装 python 的包,而 conda 还可以安装一些不是基于 Python 开发的工具软件,但遗憾的是,相较于 pip,conda 作为包管理器一般且会安装过多依赖。故推荐,在无特殊需求安装应用时,可以先选择使用
pip install packagename
进行安装,如果无法安装的话,再尝试使用conda install packagename
进行安装。 - 作为虚拟环境,conda 虚拟环境是独立与于系统原生 Python 环境的,即无论系统 Python 解释器什么版本(哪怕 2.7),你也可以指定虚拟环境中 Python 版本为 3.6;而 virtualenv 是依赖系统主环境的,只能虚拟安装操作系统中已安装解释器版本的 Python 环境。
事实上,一般不直接使用 virtualenv 和 conda 工具进行 Python 版本管理,而是 选用 virtualenv && conda 的扩展应用 来进行管理 –>
- virtualenv –> virtualenvwrapper
- conda –> conda in anaconda(miniconda)
这里是为了以一种更方便、高效、愉悦的方式来使用 virtualenv && conda。
篇幅原因,关于 virtualenv(virtualenvwrapper) && conda(anaconda/miniconda) 的使用方法可见相关系列博文:
之二 >>> Pythoner 神器之 virtualenv
之三 >>> 一文了解数据科学神器 Anaconda
Python 中的版本管理方法一般 推荐使用 Anaconda ,除了不依赖操作系统级别的 Python 解释器,以及提供了 Python 包管理、虚拟环境功能之外,还包含了 Python 进行数据分析相关的 180+ 的科学包及其依赖项,你可以将其理解为一个 Python 的开发生态圈。
Python-Vers Management
https://www.orangeshare.cn/2018/01/02/python-vers-management/
install_url
to use ShareThis. Please set it in _config.yml
.