建置python虛擬環境(Virtual Environment)

2018/03/18 posted in  python comments

多人共同協作一個project的時候非常需要各人的開發環境統一,才不會發生「我run不了你的code」這些情況。

「python的pip」不像「node js的npm」那樣有node_modulespackage.json這些規範,所以統一開發環境需要比較low level地做,一般都是使用virtualenv這個pip package。

1. 基本步驟

# 安裝virtualenv
$ pip install virtualenv

# 在project_folder裡面建立一個叫env的虛擬環境
$ cd project_folder
$ virtualenv env

# 現在應該會有個env/的folder

# 進入env/這個虛擬環境
$ source env/bin/activate
# activate是一個自帶的shell script,用作activate這個environment

# 現在你的terminal prompt會多了些前綴,提示你正在使用env/作為python environment
(env) $ 

# 離開env
$ deactivate

2. 用途

確保project的python environment在不同電腦的統一

# 在env裡面安裝新package (例如Flask)
(env) $ pip install Flask

# 查看已安裝packages
(env) $ pip freeze
Flask==0.12.2

# 保存現在的environment裡所有packages的version到requirement.txt
(env) $ pip freeze > requirement.txt

# 看看requirement.txt
(env) $ cat requirement.txt
Flask==0.12.2

# -------------

# 在另一部電腦重建一模一樣的environment
$ git pull
$ virtualenv env  # 建立env
$ source env/bin/activate

(env) $ pip freeze
# 沒有package

(env) $ pip install -r requirement.txt  # 裝回packages

$ pip freeze
Flask==0.12.2

緊記.gitignore應ignoreenv/,只需保留requirement.txt在repo中,各用家應自己建立env

3. 注意事項

虛擬環境的Python bin在env/ folder裡面,而不再是平日default用的python

# 找出正在使用哪個python

$ which python
/Users/USERNAME/.../bin/python

$ which python
/Users/USERNAME/.../project_folder/env/bin/python

使用Python 3的虛擬環境

# 確保已安裝python3
$ python3
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

# 建立使用python3的environment
virtualenv -p python3 env3