Python 必備良藥 - virtualenv
Posted on Mar 10, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 3 min read
virtualenv
現今大多數專案為了加速開發速度跟減少重複開發的成本,都不免會使用到其他方便的套件或模組,因此最好能夠對於模組的安裝與版本控管建立一套管理的機制。
所幸 Python 可以透過 virtualenv 與 pip 達到簡單的模組安裝與版本控管,提早養成此種好習慣的話,將可有效提高團隊合作開發能力,並且降低團隊成員各自開發環境相依模組版本不同可能帶來的影響,而且 virtualenv 可以有效隔離各自的開發環境,避免因為套件可能產生的衝突。
使用 virtualenv 與 pip 的流程簡述如下:
- 使用 virtualenv 建立開發環境
- activate virtualenv 開發環境
- 使用 pip 安裝 Python 套件
- 匯出目前安裝的所有套件與版本,並更新專案 requirement 檔案
本文需要安裝的套件如下:
- setuptools
- virtualenv
- pip
接下來本文詳細介紹各個步驟需要使用的相關指令。
使用 virtualenv 建立開發環境
利用以下指令,virtualenv 會自動建立一個資料夾,裡面是與系統環境隔絕的 Python 開發環境。
$ virtualenv <your_python_project_name>
該資料夾內預設會有 3 個子資料夾,分別為 bin/, include/, lib/(如下所示),其中 bin/ 用於存放 virutalenv 需要用到的指令,include/ 為存放 Python 各版本的標頭檔(.h),最後 lib/ 則是會被用來存放安裝的套件。
your_python_project_name/
bin/
include/
lib/
activate virtualenv 開發環境
啟動 virtualenv 的指令十分簡單,利用 linux 內建的 source 指令即可。
$ source <your_python_project_name>/bin/activate
啟用成功後,若要停用可使用指令 deactivate 。
$ deactivate
使用 pip 安裝 Python 套件(請記得先啟用 virtualenv )
啟動 virtualenv 後,預設就可以使用 bin/ 資料夾內的 pip 指令進行 Python 套件的安裝,所有透過 pip 安裝的套件,都會自動被安裝到 lib/ 資料夾中,不會被安裝至系統的 Python 執行環境中,因此開發者可以將整個專案資料夾打包之後,交與其他開發者就直接可以執行(但如有需額外編譯的套件,例如 Cython 則是需要再次安裝;此外,若有跨作業系統限制的套件,也需要另外處理)。如此一來,就能夠把整個 Python 專案所需要的套件存放於 virtualenv 所創造的開發環境內,降低了套件相依性可能造成影響,也可保持作業系統內 Python 執行環境的乾淨。
匯出目前安裝的所有套件與版本,並更新專案 requirement 檔案
最後,為了能夠確保開發者間所使用的套件版本一致,以避免不同版本造成的相容性與穩定性問題,我們需要將套件版本等資訊一併記錄下來(pip 稱此記錄為 requirement),未來若有其他開發者想加入時,亦可依照 requirement 內的套件資訊進行安裝。
匯出目前所有已安裝套件與版本的指令如下(請記得先啟用 virtualenv ):
pip freeze > requirements.txt
安裝 requirements.txt 內的所有套件指令如下(請記得先啟用 virtualenv ):
pip install -r requirements.txt
後記
python 3.3 之後為了做到跟 virtualenv 一樣的事情就多了 venv
模組可以使用。
使用方法:
$ pyvenv /path/to/new/virtual/environment
# or
$ python -m venv myenv
剩下的用法與 virtualenv 相同。
Virtualenvwrapper
Virtutalenvwrapper 是一套以 virtualenv 為基礎的 virtualenv 管理套件。
主要可以將多個 virtualenv 集中管理,方便管理與切換 virtualenv ,此外也有命令補齊及擴充套件等功能可以使用,是一套可以與 virtualenv 一併安裝的方便套件。
安裝方法
pip install virtualenvwrapper
使用方法
- 建立 virtualenv
mkvirtualenv <your_env_name>
上述指令預設會把 virtualenv 集中安裝在 ~/.virtualenvs
- 啟用 virtualenv
workon <your_env_name>
- 列出 site-packages
lssitepackages
- 在 shell script 中啟用 virtualenv
這通常會用在 crontab 中定期執行的 shell script
source /usr/local/bin/virtualenvwrapper.sh
workon <your_env_name>
- 列出所有 virtualenv
lsvirtualenv
- 刪除 virtualenv
rmvirtualenv <env_name>
- 新增 Python3 的 virtualenv
mkvirtualenv --python=/usr/bin/python3 <env_name>
更多相關指令:
https://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html