Pyhton 虛擬環境 (virtualenv)
虛擬環境
Python
的實務開發一般會使用虛擬環境,系統環境中保留各Python
版本的標準套件,再將專案需要的套件安裝在虛擬環境中。使用虛擬環境有以下好處:
- 每個專案會有一個獨立的
Python
環境。 - 不需要
root
權限就可以安裝新套件。 - 可以確保專案環境的一致性。
建立虛擬環境
方式一
$ python[版號] -m venv [虛擬環境名稱]
例如:建立一個專門開發深度學習的虛擬環境,並使用Python3.6
版開發。
$ python3.6 -m venv deeplearning
方式二
virtualenv -p python[版號] [虛擬環境名稱]
範例:
virtualenv -p python3.6 django
啟動虛擬環境
當建立完一個虛擬環境,會在使用者自家的目錄~
底下,建立一個以虛擬環境名稱命名的目錄,裡面會包含所有必要的檔案。使用source
指令,啟動虛擬環境目錄底下的activate檔
,可以進入虛擬環境。
$ source [虛擬環境名稱]/bin/activate
例如:
$ source deeplearning/bin/activate
成功後,指令列前端會有(虛擬環境名稱)
標示。
例如:
(deeplearning) $
在虛擬環境中,就可以使用之前提到的pip
指令安裝專案需要的第三方套件。
例如:
(deeplearning) $ pip install Django
離開虛擬環境
$ deactivate
移除虛擬環境
找出虛擬環境的所在目錄直接移除即可,如此一來,系統中各版本的Python
還是維持在最初始的狀態。
pip
若需要安裝Python
第三方套件,pip
一直是Python
社群最建議的方式,從Python 3.4
版就開始內建pip
。
同一個系統中,能夠並存多個版本的Python
,例如:同時安裝Python2.7
版和Python3.6
版。在終端機中,輸入python
並點選tab
鍵兩下,會列出當前環境下可以使用的Python
指令。
$ python
python python2.7 python3 python3.6
若需要執行python2.7
版:
$ python2.7 demo.py
當中第一個Python
指令後面沒帶版本號,可使用python --version
查詢版本。
$ python --version
Python 3.6.1
$ python3 --version
Python 3.6.1
由以上結果得知,python
和python3
指令都代表執行python3.6
版。
同理,在終端機中,輸入pip
並點選tab
鍵兩下,會出現各種版本的pip
指令。使用pip2.7
安裝的第三方套件會安裝在python2.7
版的site-packages底下,以此類推。
$ pip
pip pip2 pip2.7 pip3 pip3.6
例如:在python2.7
版下安裝Django
套件,解除安裝則使用uninstall
。
$ pip2.7 install Django
$ pip2.7 uninstall Django
當中有些未知的pip
指令,可使用pip --version
查詢pip
指令來自於哪個Python
版本,一些查詢結果如下:
$ pip --version
pip 9.0.1 from <usrdir>/python3.6/site-packages (python 3.6)
$ pip2 --version
pip 9.0.1 from <usrdir>/python2.7/site-packages (python 2.7)
由以上結果得知,使用pip
會將套件安裝在python3.6
版底下,而pip2
會將套件安裝在python2.7
版底下。
環境變數
進入Python
互動環境,執行以下程式碼,會列出所有Python
模組所在路徑,這些都是開發Python
時可以import
的模組。
- 標準套件模組存放在
/<usrdir>/lib/python3.6
底下,例如:os.py、re.py。 - 第三方套件模組存放在
/<usrdir>/lib/python3.6/site-packages
底下,例如:numpy、tensorflow。>>> import sys >>> sys.path ['', '/<usrdir>/lib/python3.6', '/<usrdir>/lib/python3.6/site-packages', ...]
新增環境變數
$ export PYTHONPATH=[自定義模組完整路徑]
範例:加入自己開發的Python
套件。
$ export PYTHONPATH=/users/Bob/mylib
例如/users/Bob/mylib
中有一個foo.py
,開發Python
時,可以import
mylib 目錄中的模組。
import foo