天天看點

《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

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版本

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環境。

假設你已經學習過我們上節内容并安裝好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指令的使用格式如下:

[options] dest_dir

中括号options表示參數選項,是可選項,即可有可無;dest_dir表示指令要執行的目錄,如:

 建立datamagedu的虛拟目錄

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的虛拟工作目錄,而後再切換至虛拟環境。

 建立虛拟工作目錄

datadatafilesoftwarevirtualpy

 通過source加載環境變量,使本地環境切換至虛拟工作目錄

source

datadatafilesoftwarevirtualpybinactivate

看到如圖1-4所示的virtualenv虛拟工作目錄辨別,表示已切換至虛拟工作目錄。

《Ansible權威指南》一1.8 Python多環境擴充管理

退出虛拟環境指令如下:

 退出虛拟環境

deactivate

看到如圖1-5所示的退出虛拟工作目錄顯示正常的bash

shell提示符,表示即已退出虛拟工作目錄。

《Ansible權威指南》一1.8 Python多環境擴充管理

至此,多版本python環境管理工具pyenv和virtualenv介紹完畢。如果基于系統預設python版本安裝有問題,可嘗試基于pyenv或virtualenv切換python版本後,再次重試1.7節ansible的安裝步驟。