Python 第十二章 virtuale
- 2020 年 1 月 13 日
- 筆記
virtualenv
在開發Python應用程式的時候,系統安裝的Python3隻有一個版本3.4,所有第三方包都會被pip安裝到python3的site-packages目錄下。
如果我們同時開發多個Python程式,那麼這些應用程式會公用一個Python,就是安裝在系統的Python3,如果A應用需要jinja2.7,而B應用程式需要jinja2.6怎麼辦?
這種情況下,每個應用可能需要獨立的一套Python環境。virtualenv就是用來為應用創建一個「隔離」的Python應用環境。
首先用pip安裝virtualenv: #pip install virtualenv
然後我們假定我們要開發一個新項目,需要一套獨立的Python運行環境,可以這麼做: 第一步,創建目錄: root #mkdir myproject
root #cd myproject/
第二步,創建一個獨立的Python運行環境,命名為venv: myproject root#virtualenv –no-site-packages venv
Using base prefix '/usr/local/.../Python.framework/Versions/3.4' New python executable in venv/bin/python3.4 Also creating executable in venv/bin/python Installing setuptools, pip, wheel...done.
命令virtualenv就可以創建一個獨立的Python環境,我們還加上了參數–no-site-packages,這樣,已經安裝到系統的Python中的所有第三方包都不會複製過來,這樣,我們就得到一個不帶任何第三方包的「乾淨」Python運行環境。
新建的Python環境被放在當前目錄下的venv目錄。有了venv這個Python環境,可以用source進入這個環境:
myproject#source venv/bin/activate
(venv) myproject#
注意命令提示符變了,有個(venv)前綴,表示當前環境是一個venv的Python環境。
下面正常安裝第三方包,並運行python命令: (venv) myproject#pip install jinja2
(venv)Mac:myproject michael$ pip install jinja2 ... Successfully installed jinja2-2.7.3 markupsafe-0.23 (venv)Mac:myproject michael$ python myapp.py ...
在venv環境下,用pip安裝到venv這個環境下,系統Python不受任何影響。也就是說venv環境專門是為myproject這個應用創建的。
退出當前環境使用deactivate命令: (venv) myproject#deactivate
myproject#
此時就回到了正常的環境,現在pip和python均是在系統Python的環境下運行。
完全可以針對不同的應用創建各自的Python運行環境,這樣就可以對每個應用的環境進行隔離。
virtualenv是如何創建獨立的Python運行環境的呢?原理很簡單,就是把系統Python複製一份到virtualenv環境,用命令source venv/bin/activate進入一個birtualenv環境時,virtualenv會修改相關變數,讓命令python和pip均指向當前的virtualenv環境。
小結: virtualenv為應用程式提供了隔離的Python環境,解決了不同應用多版本之間的衝突問題。