虛擬環境的意義,就如同 虛擬機 同樣,它能夠實現不一樣環境中Python依賴包相互獨立,互不干擾。這在必定程度的意義上,給了咱們的項目一份頗有力的保障。在這裏,我把它戲稱爲「保險」。全網惟一。html
舉個例子吧。python
假設咱們的電腦裏有兩個項目,他們都用到同一個第三方包,原本一切都順利。可是因爲某種緣由,項目B因爲某些緣由要使用這個第三方包的一些新特性(新版本纔有),而若是就這樣貿然升級了,對項目A的影響咱們沒法評估,這個時候咱們就特別須要有一種解決方案可讓項目A和B,處於兩個不一樣的Python環境中。互不影響。windows
爲了方便你們對虛擬環境有個認識,我列舉了下其優勢:bash
使不一樣應用開發環境獨立微信
環境升級不影響其餘應用,也不會影響全局的python環境app
能夠防止系統中出現包管理混亂和版本的衝突python2.7
市場上管理 Python 版本和環境的工具備不少,這裏列舉幾個:ide
p
:很是簡單的交互式 python 版本管理工具。工具
pyenv
:簡單的 Python 版本管理工具。ui
Vex
:能夠在虛擬環境中執行命令。
virtualenv
:建立獨立 Python 環境的工具。
virtualenvwrapper
:virtualenv 的一組擴展。
工具不少,但我的認爲最好用的,當屬 virtualenvwrapper
,推薦你們也使用。
因爲 virtualenvwrapper 是 virtualenv 的一組擴展,因此若是要使用 virtualenvwrapper,就必須先安裝 virtualenv。
安裝
pip install virtualenv
# 檢查版本
virtualenv --version
因爲virtualenv建立虛擬環境是在當前環境下建立的。因此咱們要準備一個專門存放虛擬環境的目錄。(如下操做在Linux在完成,windows相對簡單,請自行完成,有不明白的請微信與我聯繫。)
建立
# 準備目錄並進行
$ mkdir -p /home/wangbm/Envs
$ cd !$
# 建立虛擬環境(按默認的Python版本)
# 執行完,當前目錄下會有一個my_env01的目錄
$ virtualenv my_env01
# 你也能夠指定版本
$ virtualenv -p /usr/bin/python2.7 my_env01
$ virtualenv -p /usr/bin/python3.6 my_env02
# 你確定以爲每次都要指定版本,至關麻煩吧?
# 在Linux下,你能夠把這個選項寫進入環境變量中
$ echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7" >> ~/.bashrc
進入/退出
$ cd /home/wangbm/Envs
# 進入
$ source my_env01/bin/activate
# 退出
$ deactivate
刪除
刪除虛擬環境,只需刪除對應的文件夾就好了。並不會影響全局的Python和其餘環境。
$ cd /home/wangbm/Envs
$ rm -rf my_env01
注意:
建立的虛擬環境,不會包含原生全局環境的第三方包,其會保證新建虛擬環境的乾淨。
若是你須要和全局環境使用相同的第三方包。可使用以下方法:
# 導出依賴包
$ pip freeze > requirements.txt
# 安裝依賴包
$ pip install -r requirements.txt
virtualenv 雖然已經至關好用了,但是功能仍是不夠完善。
你可能也發現了,要進入虛擬環境,必須得牢記以前設置的虛擬環境目錄,若是你每次按規矩來,都將環境安裝在固定目錄下也沒啥事。可是不少狀況下,人是會懶惰的,到時可能會有不少個虛擬環境散落在系統各處,你將有可能忘記它們的名字或者位置。
還有一點,virtualenv 切換環境須要兩步,退出 -> 進入。不夠簡便。
爲了解決這兩個問題,virtualenvwrapper就誕生了。
安裝
# 安裝 - Linux
pip install virtualenvwrapper
# 安裝 - Windows
pip install virtualenvwrapper-win
配置
先find一下virtualenvwrapper.sh
文件的位置
find / -name virtualenvwrapper.sh
# /usr/bin/virtualenvwrapper.sh
在~/.bashrc 文件新增
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
export VIRTUALENVWRAPPER_SCRIPT=/usr/bin/virtualenvwrapper.sh
source /usr/bin/virtualenvwrapper.sh
基本語法:
mkvirtualenv [-a project_path] [-i package] [-r requirements_file] [virtualenv options] ENVNAME
經常使用方法
# 建立
$ mkvirtualenv my_env01
# 進入
$ workon my_env01
# 退出
$ deactivate
# 列出全部的虛擬環境,兩種方法
$ workon
$ lsvirtualenv
# 在虛擬環境內直接切換到其餘環境
$ workon my_env02
# 刪除虛擬環境
$ rmvirtualenv my_env01
其餘命令
# 列出幫助文檔
$ virtualenvwrapper
# 拷貝虛擬環境
$ cpvirtualenv ENVNAME [TARGETENVNAME]
# 在全部的虛擬環境上執行命令
$ allvirtualenv pip install -U pip
# 刪除當前環境的全部第三方包
$ wipeenv
# 進入到當前虛擬環境的目錄
$ cdsitepackages
# 進入到當前虛擬環境的site-packages目錄
$ cdvirtualenv
# 顯示 site-packages 目錄中的內容
$ lssitepackages
更多相關命令內容,可查看官方文檔(點擊「閱讀原文」可直接跳轉):
https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html
以上內容,是一份使用指南。
接下來,一塊兒來看看,如何使用在咱們的開發中使用咱們的虛擬環境呢
一般咱們使用的場景有以下幾種
交互式中
PyCharm中
工程中
接下來,我將一一展現。
先對比下,全局環境和虛擬環境的區別,全局環境中有requests包,而虛擬環境中並未安裝。
當咱們敲入 workon my_env01
,前面有my_env01
的標識,說明咱們已經處在虛擬環境中。後面全部的操做,都將在虛擬環境下執行。
咱們的工程項目,都有一個入口文件,仔細觀察,其首行能夠指定Python解釋器。
假若咱們要在虛擬環境中運行這個項目,只要更改這個文件頭部便可。
如今我仍是以,import requests
爲例,來講明,是不是在虛擬環境下運行的,若是是,則和上面同樣,會報錯。
文件內容:
#!/root/.virtualenvs/my_env01/bin/python
import requests
print "ok"
運行前,注意添加執行權限。
$ chmod +x ming.py
好了。來執行一下
$ ./ming.py
發現和預期同樣,真的報錯了。說明咱們指定的虛擬環境有效果。
點擊 File - Settings - Project - Interpreter
點擊小齒輪。如圖點擊添加,按提示添加一個虛擬環境。而後點 OK 就可使用這個虛擬環境,以後的項目都會在這個虛擬環境下運行。
好啦!以上就是本期的所有內容。