天天看点

Ansible权威指南 》一1.8 Python多环境扩展管理

本节书摘来自华章出版社《ansible权威指南 》一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区“华章计算机”公众号查看。

众所周知,python发展至今,版本众多,部分版本功能差异较大,在使用过程中经常遇到第三方库依赖的python版本和系统python版本不一致的情况。同时又因系统底层需调用当前版本python,所以不能随意变更当前系统python版本。如此情景下就会有python多版本共存的情况。于是,python多环境管理工具应运而生。这里为大家介绍两款工具,分别是pyenv和virtualenv。pyenv和virtualenv均为python管理工具,不同的是,前者是对python的版本进行管理,实现不同版本间的切换和使用;而后者则通过创建虚拟环境,实现与系统环境以及其他python环境的隔离,避免相互干扰。

pyenv是一个简单的python版本管理工具,以前叫作pythonbrew。它让你能够方便地切换全局python版本,安装多个不同的python版本,设置独立的某个文件夹或者工程目录特异的python版本,同时创建python虚拟环境(virualenv's)。所有这些操作均可以在类unix系统的机器上(linux和os x)不需要依赖python本身执行,而且它工作在用户层,不需要任何sudo操作。

(1)部署

pyenv作为python的版本管理工具,通过改变shell的环境变量来切换不同的python版本,以达到多版本共存的目的。该工具不支持windows系统。具体工作原理如下。

1)pyenv安装后会在系统path中插入shims路径,每次执行python相关的可执行文件时,会优先在shims里寻找python路径~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin;

2)系统选择python版本,依如下顺序选择python的版本:

shell变量设置(执行pyenv shell查看)

当前可执行文件目录下的.python_version文件里的版本号(执行pyenv shell查看)

上层目录查询找到的第一个.pyenv-version文件

全局的版本号在~/.pyenv/version文件内(执行pyenv global查看)

3)确定版本文件的位置和python版本后,pyenv会根据版本号在~/.pyenv/versions/文件夹中查找对应的python版本。执行命令pyenv versions可查看系统目前安装的python版本。

接下来开始部署pyenv,具体部署方式如下:

Ansible权威指南 》一1.8 Python多环境扩展管理
Ansible权威指南 》一1.8 Python多环境扩展管理

执行pyenv versions命令,有类似如下返回结果表示安装正常:

Ansible权威指南 》一1.8 Python多环境扩展管理

接下来我们来了解pyenv的使用方式。

(2)通过pyenv管理多python版本

pyenv命令使用规则如下:

Ansible权威指南 》一1.8 Python多环境扩展管理

我们通过pyenv安装python 3.4.1版本来熟悉其用法。

Ansible权威指南 》一1.8 Python多环境扩展管理

pyenv更多用法如下:

Ansible权威指南 》一1.8 Python多环境扩展管理

至此,pyenv介绍完毕,接下来再介绍一款python多管理工具virtualenv,它不是通过多版本管理的方式来实现系统同时兼容多python环境。virtualenv是底层基于python开发的python环境隔离工具,其通过虚拟目录的方式来实现多环境的并存。其工作原理很简单:在你所需的地方创建工作目录,该目录类似系统安装的python目录,保留完整的python环境、解释器、标准库和第三方库等,当我们需要时,切换环境变量激活即可使用。接下来我们进一步学习virtualenv的安装部署及版本管理。

python的第三方包成千上万,在一个python环境下开发时间越久、安装依赖越多,就越容易出现依赖包冲突的问题。为了解决这个问题,开发者们开发出了virtualenv,它可以搭建虚拟且独立的python环境。这样就可以使每个项目环境与其他项目独立开来,保持环境的干净,避免包冲突问题。另外,在开发python应用程序的时候,所有第三方的包都会被pip安装到系统python版本的site-packages目录下。但如果我们要同时开发多个应用程序,那这些应用程序会共用一个python,这意味着所有的包都安装在系统的python目录下,这不仅影响我们的正常开发工作,还有可能因为随意变更系统python版本信息而造成系统的不稳定。这种情况下,每个应用可能需要各自拥有一套“独立”的python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的python运行环境的。下面我们来看看virtualevn的部署,以及它如何管理python环境。

假设你已经学习过我们上节内容并安装好pip了,那么virtualenv的安装非常简单,操作如下:

Ansible权威指南 》一1.8 Python多环境扩展管理

返回如下结果表示安装成功:

Ansible权威指南 》一1.8 Python多环境扩展管理

(2)通过virtualenv管理多python版本

需强调说明的是:virtualenv不是通过多版本管理的方式来实现系统同时兼容多python环境的,而是其通过在工作目录中虚拟完整的python环境来实现python多环境并存。接下来我们看virtualenv的使用方式。

virtualenv命令的使用格式如下:

Ansible权威指南 》一1.8 Python多环境扩展管理

中括号options表示参数选项,是可选项,即可有可无;dest_dir表示命令要执行的目录,如:

Ansible权威指南 》一1.8 Python多环境扩展管理

可用的options选项如下:

Ansible权威指南 》一1.8 Python多环境扩展管理
Ansible权威指南 》一1.8 Python多环境扩展管理

下面详细看看virtualenv在工作中的应用方式。我们先创建一个/data/dataf?ile/software/virtualpy/的虚拟工作目录,而后再切换至虚拟环境。

Ansible权威指南 》一1.8 Python多环境扩展管理

看到如图1-4所示的virtualenv虚拟工作目录标识,表示已切换至虚拟工作目录。

Ansible权威指南 》一1.8 Python多环境扩展管理

退出虚拟环境命令如下:

Ansible权威指南 》一1.8 Python多环境扩展管理

看到如图1-5所示的退出虚拟工作目录显示正常的bash shell提示符,表示即已退出虚拟工作目录。

Ansible权威指南 》一1.8 Python多环境扩展管理

至此,多版本python环境管理工具pyenv和virtualenv介绍完毕。如果基于系统默认python版本安装有问题,可尝试基于pyenv或virtualenv切换python版本后,再次重试1.7节ansible的安装步骤。