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

简介:

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


1.8 Python多环境扩展管理

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

1.8.1 Pyenv的部署与使用

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路径~.pyenvshimsusrlocalbinusrbinbin;

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

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

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

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

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

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

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

 clone pyenv至家目录

git clone git github.comyyuupyenv.git ~.pyenv

 修改环境变量

echo 'export PYENV_ROOT=$HOME.pyenv'  ~.bashrc

echo 'export PATH=$PYENV_ROOTbin$PATH'  ~.bashrc

echo 'eval $(pyenv init -)'  ~.bashrc

 重启当前 Shell

exec $Shell –l

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

 system (set by homeo2o.pyenvversion)

    2.7.8

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

(2)通过Pyenv管理多Python版本

Pyenv命令使用规则如下:

Usage pyenv command [args]

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

 查看可安装的版本列表

pyenv install –list

 安装指定的Python版本

pyenv install 3.4.1

 切换当前目录Python版本为3.4.1

pyenv local  3.4.1

 切换全局目录Python版本为3.4.1

pyenv global  3.4.1

 刷新shims

pyenv rehash

Pyenv更多用法如下:

commands        列出pyenv的所有可用命令

local           设置或列出当前环境下Python版本号

global         设置或列出全局环境下Python版本号

shell           设置或列出Shell环境下Python版本

install         安装指定的Python版本

uninstall      卸载指定的Python版本

rehash        重新加载Pyenv的shims路径(安装完Python版本后需执行该命令)

version       展示当前Python版本号及其生效的路径

versions           列出Pyenv管控的所有可用Python版本

which         列出要使用命令的绝对路径

whence       列出后缀命令的所有可用版本

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

1.8.2 Virtualenv的部署与使用

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

(1)部署

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

 安装virtualenv

pip install virtualenv

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

Installing collected packages virtualenv

Successfully installed virtualenv-15.0.3

(2)通过Virtualenv管理多Python版本

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

Virtualenv命令的使用格式如下:

virtualenv [OPTIONS] DEST_DIR

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

 创建datamagedu的虚拟目录

virtualenv datamagedu

可用的OPTIONS选项如下:

--version  显示当前版本号。

-h, --help  显示帮助信息。

-v, --verbose  显示详细信息。

-q, --quiet  不显示详细信息。

-p PYTHON_EXE, --python=PYTHON_EXE  指定所用的python解析器的版本,比如--python=python2.5 就使用2.5版本的解析器创建新的隔离环境。默认使用的是当前系统安装(usrbinpython)的python解析器。

--clear  清空非root用户的安装,并从头开始创建隔离环境。

--no-site-packages  令隔离环境不能访问系统全局的site-packages目录。

--system-site-packages  令隔离环境可以访问系统全局的site-packages目录。

--unzip-setuptools  安装时解压Setuptools或Distribute。

--relocatable  重定位某个已存在的隔离环境。使用该选项将修正脚本,并令所有.pth文件使用相应路径。

--distribute  使用Distribute代替Setuptools,也可设置环境变量VIRTUALENV_DISTRIBUTE达到同样效果。

--extra-search-dir=SEARCH_DIRS  用于查找setuptoolsdistributepip发布包的目录。可以添加任意数量的–extra-search-dir路径。

--never-download  禁止从网上下载任何数据。此时,如果在本地搜索发布包失败,virtualenv就会报错。

--prompt==PROMPT  定义隔离环境的命令行前缀。

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

 创建虚拟工作目录

virtualenv datadatafilesoftwarevirtualpy

 通过source加载环境变量,使本地环境切换至虚拟工作目录

source datadatafilesoftwarevirtualpybinactivate

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


faa36382e2f296257668c1e6bb24e4b27800411e

退出虚拟环境命令如下:

 退出虚拟环境

Deactivate

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


f19dbce02a07ad4047edb57f4533194e5b039057

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

相关文章
|
9月前
|
Rust Unix Linux
【一起学Rust | 进阶篇 | Service Manager库】Rust专用跨平台服务管理库
【一起学Rust | 进阶篇 | Service Manager库】Rust专用跨平台服务管理库
331 0
|
3月前
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
214 3
|
4月前
|
存储 JSON 安全
面向企业应用程序的 Python 配置管理
面向企业应用程序的 Python 配置管理
51 9
|
6月前
|
运维 Kubernetes Cloud Native
云原生之旅:Kubernetes 集群的搭建与实践Python 编程入门:从零基础到编写实用脚本
【8月更文挑战第30天】在数字化转型的大潮中,云原生技术以其弹性、可扩展性及高效运维能力成为企业IT架构升级的关键。本文将通过实际操作演示如何在本地环境搭建一个简易的Kubernetes集群,带你领略云原生的魅力所在。从集群规划到服务部署,每一步都是对云原生理念的深刻理解和应用。让我们共同探索,如何通过Kubernetes集群的搭建和运维,提升业务灵活性和创新能力。
|
6月前
|
运维 数据安全/隐私保护 Docker
深入浅出Python装饰器《Docker容器化技术在运维中的应用与实践》
【8月更文挑战第29天】装饰器在Python中是一个强大而神秘的存在,它能够轻松地改变一个函数的行为而不修改其源代码。本文将通过浅显易懂的语言和生动的比喻,带你一步步揭开装饰器的神秘面纱,从基本概念到实际应用,让你轻松掌握这一魔法般的工具。
|
6月前
|
运维 jenkins 网络安全
[ansible]简介安装入门
[ansible]简介安装入门
|
Rust 开发工具 git
性能的极致,Rust的加持,Zed-Dev编辑器快速搭建Python3.10开发环境
快就一个字,甚至比以快著称于世的Sublime 4编辑器都快,这就是Zed.dev编辑器。其底层由 Rust 编写,比基于Electron技术微软开源的编辑器VSCode快一倍有余,性能上无出其右,同时支持多人编辑代码。
性能的极致,Rust的加持,Zed-Dev编辑器快速搭建Python3.10开发环境
|
存储 网络协议 关系型数据库
金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap
OpenLdap(Lightweight Directory Access Protocol)是什么?它其实是一个开源的、具备工业标准特性的应用协议,可以使用TCP协议提供访问控制和维护分布式信息的目录信息。这是一个传统意义上的书面解释,是的,毫无疑问,你会一脸懵逼。
金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap
|
机器学习/深度学习 人工智能 自然语言处理
热加载技术:修改Python代码并实时查看结果 ⛵
本文讲解Python热加载技术,以及Reloading工具库的使用。暂停运行的代码,修改补充后重新运行,意味着训练了数个小时的模型参数被舍弃。热加载技术可以解决这个问题。
548 0
热加载技术:修改Python代码并实时查看结果 ⛵
|
运维 Linux Shell
Python自动化部署工具-Fabric
Python自动化部署工具-Fabric
Python自动化部署工具-Fabric