虛擬環(huán)境是一個將不同項目所需求的依賴分別放在獨立的地方的一個工具,它給這些工程創(chuàng)建虛擬的Python環(huán)境。它解決了“項目X依賴于版本1.x,而項目Y需要項目4.x”的兩難問題,而且使你的全局site-packages目錄保持干凈和可管理。
關(guān)于virtualenv怎么使用請看官方介紹:http://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html。
這里想談的問題是——它是怎么做到的?How?
激活virtualenv的方式是運行這行代碼:source venv/bin/activate,打開activate腳本,會發(fā)現(xiàn),原來如此: 
可以看出,它只是很簡單地,在原來的環(huán)境變量的最前面,增加了自己關(guān)于python庫的運行環(huán)境而已。
比如我們在virtualenv里運行python這個可執(zhí)行文件,會首先在當前目錄找,找不到再去系統(tǒng)路徑(PATH環(huán)境變量)里面找;由于在通過PATH查找是從頭到尾順序找,直到找到第一個符合的程序來執(zhí)行,所以把虛擬環(huán)境的可執(zhí)行文件目錄放在最前面,自然執(zhí)行的都是自己當前所代表的python環(huán)境了!
這應該就是virtualenv的本質(zhì),其它的腳本代碼是一些細節(jié)的東西,有興趣可以自行研究之。
里面的設(shè)計有挺多精巧之處的,比如,真的要拷貝所有的python可運行文件嗎?這樣太浪費空間了,且看看virtualenv是怎么做的: 
其實就是做了一個軟鏈接,保證可用又省空間!(從上圖可以看出,一個鏈接只占用了7個字節(jié))
新聞熱點
疑難解答