創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2016年10月16日 星期日

Python虛擬環境

綱要

〇、本文提要
一、淺談Python虛擬環境
二、建立Python虛擬環境的工具virtualenv與env
三、virtualenv安裝與使用方法
四、venv的安裝與使用方法
五、其它補充
六、參考

〇、本文提要

本文將談論何謂Python虛擬環境以及它的用處,還有相關工具的簡易使用。

為方便說明,以下假定工作環境是Ubuntu 16.04 64位元、Python 3.5,於必要時再補充一下在Windows上的作法。

一、淺談Python虛擬環境

在作業系統中已預裝了Python 2與Python 3,是整個系統用的Python,除了可以讓使用者使用之外,有些系統用的程式與工具也會用到它們。

假若使用者要在這電腦上以Python開發稍具規模的軟體專案,很可能要加裝一些第三方的Python套件(Package),如果有多個專案,也很可能會在不同專案之間使用不同版號的同一個套件。

像這種情況,如果把這些套件都裝在整個系統用的Python,勢必造成混亂,此時就需要某種機制,可為A專案隔離出它所需要使用的Python環境與第三方套件,也可為使用與A專案截然不同套件的B專案隔離出一個單獨的Python執行環境,這樣也不會影響到整個系統用的Python環境。這機制就是這裡所要談的Python虛擬環境。

這樣,就可在整個系統用的Python安裝一般常用的套件,而在不同性質的專案中,視情況安裝不同的套件,而不致干擾到其它專案與整個系統的Python環境。

你可以想像整個系統用的Python是本尊,虛擬環境則是用本尊建立出來的分身,而分身可以依需要做出與本尊截然不同的改動。

二、建立Python虛擬環境的工具virtualenv與venv

建立Python虛擬環境的工具可用virtualenv或是venv。
  • virtualenv非內建,需要額外安裝,但因比venv較早發展,故有不少的使用群眾,也有相關的延伸套件,像virtualenvwrapper。
  • venv則是Python 3.3版開始出現在標準庫中,用來建立輕量型虛擬環境,其使用法與virtualenv很相似。
要使用virtualenv或venv可自行決定,如果只是需要很單純地建立、啟用與退出虛擬環境,venv就足夠了;若需要較多、較進階的功能,可考慮virtualenv。

以下僅說明如何使用virtualenv或venv建立、啟用與退出虛擬環境,不涉及像virtualenvwrapper之類延伸套件的使用。

三、virtualenv安裝與使用方法

在可以使用virtualenv建立虛擬環境前,先在整個系統用的Python環境中安裝virtualenv:

用pip安裝:


$ sudo pip3 install virtualenv
pip的使用,請見〈pip: Python Installs Packages

或是用apt工具安裝python3-virtualenv:


$ sudo apt-get install python3-virtualenv
個人偏好前者,因virtualenv很常更新,用pip即時更新很方便,若用後者,apt套件的更新就不那麼即時。
Windows上無apt的方式,就用pip安裝方式。

裝好後,就可用它來建立虛擬環境。為了方便說明,在此先假定一下虛擬環境的位置。
假定有個專案目錄叫demo_project,要為此專案建立一個目錄叫demo_env存放Python虛擬環境,而這二目錄都放在~/demo目錄下。

建立虛擬環境:


$ cd ~/demo/
$ virtualenv demo_env
顯示以下訊息:
New python executable in /home/fygul/demo/demo_env/bin/python3
Also creating executable in /home/fygul/demo/demo_env/bin/python
Installing setuptools, pip, wheel...done.
此時會在~/demo/建立demo_env子目錄,並把Python 3.5的直譯器環境與pip工具等等……複製到其中。

單獨執行virtualenv不加參數則會顯示使用法。

啟用虛擬環境:


$ source demo_env/bin/activate
啟用此環境後,此時的提示符號前面會以半形括弧加上虛擬環境的名稱,如:
(demo_env)$

這時在(demo_env)$提示符號下執行Python程式或用pip安裝套件,都是使用demo_env子目錄中的Python環境。
例如要執行~/demo/demo_project/hello_world.py:

(demo_env)$ python demo_project/hello_world.py
或是在demo_project中有個requirements.txt,想用pip做安裝其中的套件:

(demo_env)$ cd demo_project
(demo_env)$ pip install -r requirements.txt
在此提示符號下,也是可以執行系統指令,並不受影響。

在Windows上啟用有點不太一樣,可以看一下demo_env/Scripts/下的指令檔,有activate, activate.bat, activate.ps1,後二者分別用在cmd.exe與PowerShell。
例如在cmd.exe下執行啟用指令:

demo_env\bin\activate.bat


demo_env\bin\activate

退出虛擬環境

在完成在此虛擬環境所要執行的工作後,若不是直接關閉這Terminal終端機窗口,而是要繼續使用終端機執行其它Python程式,就要先退出這虛擬環境,回復原來:

(demo_env)$ deactivate
提示符號會回復原來的系統提示符號。此時再執行Python程式,就是使用整個系統用的Python環境了。

Windows上則是:

demo_env\Scripts\deactivate.bat

四、venv的安裝與使用方法

在Windows上無需安裝即可使用,在Ubuntu上要用apt安裝:

$ sudo apt-get install python3-venv
因為venv是標準庫中的模組,不是列在PyPI上的套件,所以不適用於pip安裝方式。

venv的用法與virtualenv很類似,除了建立虛擬環境的指令行不太一樣。

建立虛擬環境

第一種方法是用pyvenv腳本建立虛擬環境:


$ cd ~/demo/
$ pyvenv demo_env
若pyvenv後的目標目錄是多層的,它也可以自動把不存在的目錄建立起來,例如目標目錄是demo2/a/b/c/new_venv,以此例來講,虛擬環境會建立在~/demo/demo2/a/b/c/new_venv,這中間的目錄由pyvenv一次為你開好了。
※2018-6-22補充:Python 3.6版起pyvenv已不再使用,請改用以下第二種方法。

第二種方式,執行venv模組來建立虛擬環境:


$ python3 -m venv demo_env
這裡的-m選項的意思即是以Python3執行模組venv。

Windows上請用第二種方式。

pyvenv較詳細的用法可見pyvenv -h或python3 -m venv -h,以及後面的六、參考。

啟用、退出虛擬環境


$ source demo_env/bin/activate
(demo_env)$ deactivate
指令的用法基本上可視為與virtualenv一樣,雖然隨著所用的shell的不同會有點小差異,但一般情形下幾乎可忽略不管。

五、其它補充

本文僅做很簡單的介紹,像在建立虛擬環境時指定Python版本,或更新虛擬環境等等……更多選項,則可見指令的幫助或是後面的參考。

最後補充一個與虛擬環境並無直接相關的話題。

一部電腦上可安裝多個版本的Python與虛擬環境,而不致互相干擾。

在某些情況下,也許不想自己建立虛擬環境,那麼也可考慮拿另一個現成獨立的Python執行環境來用,也不會干擾到系統用的Python。

例如工作上常做數據分析,常有繪圖的需要,那麼可考慮用Anaconda,它不僅是個獨立的Python執行環境,也預裝了很多套件,省卻自己逐一安裝的功夫。類似的還有像WinPython, Python(x,y)...這可以在Python官網上的Alternative Implementations網頁上找到。

以前還有人做Portable Python,但目前已不再做了。

六、參考

沒有留言:

張貼留言