天天看點

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的安裝步驟。