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