我在以前寫過一篇「Python新手常見的幾個問題及工具推薦」說過新手每每沒有注意環境隔離,致使Python項目包與包之間衝突。python
而且Python2與3代碼執行有問題等等。鑑於此我今天給你們聊聊關於Python環境隔離問題以及如何進行隔離。git
咱們都知道Python開發項目很容易,項目也經得起工業級別考驗。不少開發者都會習慣用Python開發項目,可是因爲咱們每一個項目狀況都有些不同。好比 今天可能用的是Django 1.8,明天可能用的是Django 2.1。github
若是不進行環境隔離全局安裝就會致使包的衝突,依賴不一樣,出現問題。shell
這個時候每一個應用都須要一套「獨立」的Python運行環境。而Virtualenv就是拿來爲應用建立這一套「隔離」的Python運行環境。bash
首先用pip安裝app
pip install virtualenv工具
建立虛擬環境測試
sitin@test:/data/opt/test$ virtualenv venv
sitin@test:/data/opt/test$ source venv/bin/activate
(venv) sitin@test:/data/opt/test$ deactivate
sitin@test:/data/opt/test$
複製代碼
上面若是咱們配置了vitualenvwrapper會更加方便切換進入虛擬環境,作到一鍵切換進入虛擬環境。不用每次都去到指定項目目錄裏面進行 source venv/bin/activate
。ui
安裝以下:spa
pip install virtualenvwrapper mkdir ~/.virtualenvs
安裝好了,你能夠在你的.bashrc或者.zshrc配置virtualenvwrapper,配置以下。
export WORKON_HOME=$HOME/.virtualenvs # 指定目錄
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' # 隔離系統site-packages
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
if [[ -r /usr/local/bin/virtualenvwrapper.sh ]]; then
source /usr/local/bin/virtualenvwrapper.sh
else
echo "WARNING: Can't find virtualenvwrapper.sh"
fi
複製代碼
配置好咱們能夠建立咱們虛擬環境方式以下:
mkvirtualenv your_project #建立 rmvitualenv your_project #刪除 workon # 列出項目 workon your_project # 進去某個項目
經過上面這種方式,讓咱們更加方便切換進入虛擬環境了。
說了vitualenv,vitualenvwrapper,進行Python 包的環境隔離,咱們接下來聊聊咱們終極利器pyenv
-- Python版本的隔離。
咱們都知道python存在2,3問題,咱們常常須要維護老版本Python2項目,也要考慮新版本Python3的遷移。
說它是終極利器是它除了python版本問題,也能夠結合virtualenv,vitualenvwrapper一塊兒使用。
目前pyenv這個庫在github上面有14K+的star,可見受到到了很是多的關注。
這裏面咱們直接進入Mac的安裝環節:
brew install pyenv brew install pyenv-virtualenv brew install pyenv-virtualenvwrapper
把下面的配置加入到咱們的shell環境中,好比個人就是.zshrc。
# ---pyenv---
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
複製代碼
配置好以後,咱們能夠看到pyenv的shell補全,以下圖。
pyenv的具體使用方式:
pyenv install -l # 獲取安裝列表
pyenv install 3.7.1 # 安裝
python3.7pyenv global 3.7.1 # 設置全局
pythonpyenv virtualenv test-pyenv-venv # 建立虛擬包pyenv activate test-pyenv-venv # 進入虛擬環境
pyenv deactivate # 退出...
複製代碼
這裏面我就不過多演示使用了,看一個官方的配圖。
上面咱們提到了關於使用pyenv進行python2,3的版本隔離狀況,實際過程當中想要寫出兼容Python2,3的代碼,那麼咱們不得不提一下這個測試工具--tox。
tox提供了很是方便的方式來運行咱們的不一樣環境下的測試,很是方便咱們在寫測試的時候,同時對Python2,Python3的環境進行測試,這裏面強烈推薦你們使用。
最後關於虛擬環境實際Python3 官方有原生venv支持虛擬環境代替vitualenv目前接受度還較低,你們感興趣能夠去了解下。咱們虛擬環境就暫時聊到這兒,歡迎你給我留言,談談你的一些見解或思考。
往期回顧: