有的時候因為各種原因,在操作系統下,我們會安裝很多版本的Python解釋器。同樣,我們也有可能因為各種原因,需要不同版本的模塊,比如Django1.8,Django1.11。再加上pip工具管理器的版本混亂問題。這就使得很多人在Python的環境管理上產生極大的混亂。
通常每個項目,甚至項目不同階段的版本,需要不同的Python解釋器和依賴庫。為了清晰明了,安全可靠的管理這些環境,需要為每個項目或每個應用各自建立一套“獨立、隔離”的Python運行環境。
virtualenv就是用來為每一個項目創建一套“獨立隔離”的Python運行環境的工具。
在Python3.4之前,virtualenv需要獨立手動安裝后,方可執行。之后的版本中,Python自帶了一個venv庫,執行Python –m venv就可以達到與virtalenv同樣的效果。更多的用戶習慣上還是使用virtualenv的方式。
Python多解釋器環境加上virtualenv創建的多虛擬環境共存在同一操作系統下的情形一般如下圖所示:
核心要點是:
- 一個操作系統下,可以有多個“操作系統級別的”Python解釋器;
- 每個Python解釋器有一個指向自己的pip工具,兩者一一對應;
- 通過virtualenv可以虛擬任何一個“操作系統級別的”Python解釋器成為一個“虛擬級別”的解釋器;
- 每個“虛擬級別”的解釋器又擁有自己獨立的pip工具和site-packages。
如果你理解了上面幾點,就能明白virtualenv和pip在使用上的區別。
安裝virtualenv
以windows操作系統為例,要安裝virtualenv,建議直接使用當前環境變量下指定的pip,也就是你操作系統默認的那個python版本所綁定的pip,這樣方便命令調用。通常如下:
pip install virtualenv
可以在命令行界面中驗證安裝:where virtualenv
可以看出,這里的virtualenv是作為一個可執行程序,安裝在我系統默認的Python36版本下。而我當前操作系統下其實有3個版本的Python:
你或許有疑問?那我要虛擬Python2.7的版本怎么辦?在2.7下也裝一個virtualenv?不需要的!virtualenv可以指定虛擬的Python解釋器版本,只要你本地操作系統下安裝了這個版本!
建立虛擬環境
如果自己手動管理所有的虛擬環境,通常會建立一個目錄,用來放置所有的虛擬環境。這里:mkdir d:\Python_virtualenvs
,然后運行: virtualenv –p c:\Python27\Python2.exe –-no-site-packages d:\Python_virtualenvs\for_django
-p: 指定你要虛擬的Python版本,這里選擇了本地的python2.7
–-no-site-packages:表示在建立虛擬環境時不將原版本中的第三方庫拷貝過來,這樣就能獲得一個純凈的Python環境。
d:\Python_virtualenvs\for_django:表明在該目錄下,建立一個叫做for_django的虛擬環境,這樣的命名方式,讓你一眼就能看出這個虛擬環境是為誰建立的。
我們看一眼文件系統中的情況,從截圖中可以看出,環境非常干凈!
使用虛擬環境
命令行下,進入你要使用的虛擬環境的目錄下的script文件夾,運行activate
命令。或者使用絕對路徑的方式調用該命令。
注意命令提示符(for_django),它表示你當前在for_django這個虛擬環境內。現在,你可以當做一個正常的Python環境使用。例如運行python命令,又或者使用pip安裝第三方庫pip install requests。這些都被限制和綁定在for_django這個虛擬環境內,不會對操作系統下本地的Python版本和其它的虛擬環境產生任何的影響!
退出虛擬環境
要退出虛擬環境,只要運行script目錄下的deactivate
命令就可以了。
要刪除虛擬環境,直接刪除虛擬環境所在的目錄就可以了,注意不要將其它的環境給刪了。但是,刪除虛擬環境后,所有以前使用該環境的工程都將受到影響。這點很好理解,所以請確保環境不再有需要再刪除!
linux操作系統下的使用
對於linux操作系統,使用方法基本類似。只是虛擬環境中的文件路徑和腳本調用的方式和windows系統下不太一樣,仔細看下圖中的bin目錄,提供了一個activate腳本,以及一個寫入環境變量的deactivate命令。
創建虛擬環境: $ virtualenv -p /usr/bin/python2.7 –-no-site-packages my_venv
啟動虛擬環境: $ source my_venv/bin/activate
退出虛擬環境: $ deactivate
刪除虛擬環境: $ rm –r my_venv
Pycharm結合virtualenv的使用
windows下的開發,很多時候使用命令行並不是那么方便,尤其是在Pycharm開發環境下,頻繁切換界面也是種負擔。實際上Pycharm可以指定解釋器,直接將項目的Python解釋器設置為你要使用的虛擬環境就行,如下所示:
在settings中:
選擇Python:
virtualenv配合pip快速建立開發環境
virtualenv虛擬環境配合pip的freeze功能,可以一次性快捷的將整個環境下的第三方模塊全部記錄下來: pip freeze > d:\requirements.txt
對應的,也可以用它一次性通過在別的機器上或虛擬環境里,將文件里列出的第三方庫安裝起來。只需要使用命令:pip install -r requirements.txt
摘自:http://www.liujiangblog.com/course/python/6