Python 第十二章 virtuale

發布時間:2019-08-13 07:41:24編輯:auto閱讀(142)

    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環境,解決了不同應用多版本之間的沖突問題。


關鍵字