本節書摘來自華章出版社《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虛拟工作目錄辨別,表示已切換至虛拟工作目錄。

退出虛拟環境指令如下:
退出虛拟環境
deactivate
看到如圖1-5所示的退出虛拟工作目錄顯示正常的bash
shell提示符,表示即已退出虛拟工作目錄。
至此,多版本python環境管理工具pyenv和virtualenv介紹完畢。如果基于系統預設python版本安裝有問題,可嘗試基于pyenv或virtualenv切換python版本後,再次重試1.7節ansible的安裝步驟。