終極利器|一篇文章講清楚Python虛擬環境
我在之前寫過一篇「 Python新手常見的幾個問題及工具推薦 」說過新手往往沒有注意環境隔離,導致Python專案包與包之間衝突。
並且Python2與3程式碼執行有問題等等。鑑於此我今天給大家聊聊關於Python環境隔離問題以及如何進行隔離。
學習Python中有不明白推薦加入交流群
號:864573496
群裡有志同道合的小夥伴,互幫互助,
群裡有不錯的視訊學習教程和PDF!
Virtualenv
我們都知道Python開發專案很容易,專案也經得起工業級別考驗。很多開發者都會習慣用Python開發專案,但是由於我們每個專案情況都有些不一樣。比如 今天可能用的是Django 1.8,明天可能用的是Django 2.1。
如果不進行環境隔離全域性安裝就會導致包的衝突,依賴不同,出現問題。
這個時候每個應用都需要一套「獨立」的Python執行環境。而Virtualenv就是拿來為應用建立這一套「隔離」的Python執行環境。
首先用pip安裝
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$
Virtualenvwrapper
上面如果我們配置了vitualenvwrapper會更加方便切換進入虛擬環境,做到一鍵切換進入虛擬環境。不用每次都去到指定專案目錄裡面進行 source venv/bin/activate。
安裝如下:
pip install virtualenvwrapper
mkdir ~/.virtualenvs
安裝好了,你可以在你的.bashrc或者.zshrc配置virtualenvwrapper,配置如下。
exportWORKON_HOME=$HOME/.virtualenvs# 指定目錄
exportVIRTUALENVWRAPPER_PYTHON=/usr/bin/python
exportVIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'# 隔離系統site-packages
exportPIP_VIRTUALENV_BASE=$WORKON_HOME
exportPIP_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 # 進去某個專案
通過上面這種方式,讓我們更加方便切換進入虛擬環境了。
Pyenv
說了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---
exportPATH="$HOME/.pyenv/bin:$PATH"
eval"$(pyenv init -)"
eval"$(pyenv virtualenv-init -)"
配置好之後,我們可以看到pyenv的shell補全,如下圖。

pyenv的具體使用方式:
pyenvinstall-l# 獲取安裝列表
pyenvinstall3.7.1# 安裝python3.7
pyenvglobal3.7.1# 設定全域性python
pyenv virtualenvtest-pyenv-venv# 建立虛擬包
pyenvactivatetest-pyenv-venv# 進入虛擬環境
pyenv deactivate# 退出
...
這裡面我就不過多演示使用了,看一個官方的配圖。

Tox
上面我們提到了關於使用pyenv進行python2,3的版本隔離情況,實際過程中想要寫出相容Python2,3的程式碼,那麼我們不得不提一下這個測試工具--tox。
tox提供了非常方便的方式來執行我們的不同環境下的測試,非常方便我們在寫測試的時候,同時對Python2,Python3的環境進行測試,這裡面強烈推薦大家使用。
最後關於虛擬環境實際Python3 官方有原生venv支援虛擬環境代替vitualenv目前接受度還較低,大家感興趣可以去了解下。我們虛擬環境就暫時聊到這兒,歡迎你給我留言,談談你的一些看法或思考。