virtualenv
主要是為了解決在同一個系統(tǒng)中存在多個項目的情況, 采用虛擬的方式,為每個項目創(chuàng)建各自的環(huán)境,使各個項目不會相互干擾
正常情況下,我們 pip 和 python 命令所執(zhí)行的命令都是在系統(tǒng)環(huán)境下執(zhí)行,修改的也是系統(tǒng)下的 python,導(dǎo)致每次的修改都是全局性的
當(dāng)一個系統(tǒng)中存在多個項目時,而每個項目的配置需要又不一樣,對全局的 python 環(huán)境修改又太麻煩
同樣適用了虛擬環(huán)境,可以大膽的做各種 python 的實驗、測試、開發(fā)等等,不用擔(dān)心對系統(tǒng)全局環(huán)境的影響
sudo pip install virtualenv
sudo pip install virtualenvwrappe
安裝好之后在 /usr/local/bin 下有兩者
然后新建一個文件夾用來存放虛擬環(huán)境
例如:
cd Desktop
# 新建文件夾 myproject
mkdir myproject
# 進入到文件夾中
cd myproject
命令virtualenv就可以創(chuàng)建一個獨立的Python運行環(huán)境,我們還加上了參數(shù)--no-site-packages,這樣,已經(jīng)安裝到系統(tǒng)Python環(huán)境中的所有第三方包都不會復(fù)制過來,這樣,我們就得到了一個不帶任何第三方包的“干凈”的Python運行環(huán)境。
virtualenv 虛擬環(huán)境的名稱
例如:
virtualenv venv
# 加上--no-site-packages 將不會拷貝系統(tǒng)Python 環(huán)境中已經(jīng)存在的 python 包
virtualenv --no-site-packages venv
這個時候在 venv 下已經(jīng)創(chuàng)建了一個新的 python 環(huán)境
sit-packages 默認安裝了 setuptools, pip, wheel
新建的Python環(huán)境被放到當(dāng)前目錄下的venv目錄。有了venv這個Python環(huán)境,可以用source進入該環(huán)境:
# 注意需要使用 source 命令進入此 venv 環(huán)境,否則所有的 pip或python均是在系統(tǒng)Python環(huán)境下執(zhí)行
source venv/bin/activate
注意到命令提示符變了,有個(venv)前綴,表示當(dāng)前環(huán)境是一個名為venv的Python環(huán)境。
下面正常安裝各種第三方包,并運行python命令:
現(xiàn)在可以測試安裝一個包測試其安裝地址
pip install jinja2
# 這個時候可以發(fā)下在 venv/lib/python2.7/sit-packages 目錄下面發(fā)現(xiàn) jinja 庫
在venv環(huán)境下,用pip安裝的包都被安裝到venv這個環(huán)境下,系統(tǒng)Python環(huán)境不受任何影響。也就是說,venv環(huán)境是專門針對myproject這個應(yīng)用創(chuàng)建的。
退出當(dāng)前的venv環(huán)境,使用deactivate命令:
deactivate
此時就回到了正常的環(huán)境,現(xiàn)在pip或python均是在系統(tǒng)Python環(huán)境下執(zhí)行
virtualenv是如何創(chuàng)建“獨立”的Python運行環(huán)境的呢?原理很簡單,就是把系統(tǒng)Python復(fù)制一份到virtualenv的環(huán)境,用命令source venv/bin/activate進入一個virtualenv環(huán)境時,virtualenv會修改相關(guān)環(huán)境變量,讓命令python和pip均指向當(dāng)前的virtualenv環(huán)境。