【轉(zhuǎn)】python開(kāi)發(fā)之virtualenv與virtualenvwrapper講解

在使用 Python 開(kāi)發(fā)的過(guò)程中,工程一多,難免會(huì)碰到不同的工程依賴(lài)不同版本的庫(kù)的問(wèn)題;

亦或者是在開(kāi)發(fā)過(guò)程中不想讓物理環(huán)境里充斥各種各樣的庫(kù),引發(fā)未來(lái)的依賴(lài)災(zāi)難。

此時(shí),我們需要對(duì)于不同的工程使用不同的虛擬環(huán)境來(lái)保持開(kāi)發(fā)環(huán)境以及宿主環(huán)境的清潔。

這里,就要隆重介紹 virtualenv,一個(gè)可以幫助我們管理不同 Python 環(huán)境的絕好工具。

virtualenv 可以在系統(tǒng)中建立多個(gè)不同并且相互不干擾的虛擬環(huán)境。

一、Linux下安裝、配置virtualenv

  1. 指定清華源下載pip的包

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv

  1. 升級(jí)pip工具

pip3 install --upgrade pip

  1. 安裝virtualenv

pip3 install virtualenv

  1. 創(chuàng)建目錄

mkdir Myproject
cd Myproject

  1. 創(chuàng)建獨(dú)立運(yùn)行環(huán)境-命名

virtualenv --no-site-packages --python=python3 venv#得到獨(dú)立第三方包的環(huán)境,并且指定解釋器是python3

  1. 進(jìn)入虛擬環(huán)境

source venv/bin/activate#此時(shí)進(jìn)入虛擬環(huán)境(venv)Myproject

  1. 安裝第三方包

(venv)Myproject: pip3 install django==1.9.8

此時(shí)pip的包都會(huì)安裝到venv環(huán)境下,venv是針對(duì)Myproject創(chuàng)建的

  1. 退出venv環(huán)境

deactivate命令

  1. 原理

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)境。

二、確保開(kāi)發(fā)環(huán)境的一致性

  1. 假設(shè)我們?cè)诒镜亻_(kāi)發(fā)環(huán)境,準(zhǔn)備好了項(xiàng)目+依賴(lài)包環(huán)境
  2. 現(xiàn)在需要將項(xiàng)目上傳至服務(wù)器,上線發(fā)布
  3. 那么就要保證服務(wù)器的python環(huán)境一致性

解決方案:
1.通過(guò)命令保證環(huán)境的一致性,導(dǎo)出當(dāng)前python環(huán)境的包

pip3 freeze > requirements.txt

這將會(huì)創(chuàng)建一個(gè) requirements.txt 文件,其中包含了當(dāng)前環(huán)境中所有包及 各自的版本的簡(jiǎn)單列表。
可以使用 “pip list”在不產(chǎn)生requirements文件的情況下, 查看已安裝包的列表。

  1. 上傳至服務(wù)器后,在服務(wù)器下創(chuàng)建virtualenv,在venv中導(dǎo)入項(xiàng)目所需的模塊依賴(lài)

pip3 install -r requirements.txt

三、虛擬環(huán)境之virtualenvwrapper
virtualenv 的一個(gè)最大的缺點(diǎn)就是:
每次開(kāi)啟虛擬環(huán)境之前要去虛擬環(huán)境所在目錄下的 bin 目錄下 source 一下 activate,這就需要我們記住每個(gè)虛擬環(huán)境所在的目錄。
并且還有可能你忘記了虛擬環(huán)境放在哪……

一種可行的解決方案是,將所有的虛擬環(huán)境目錄全都集中起來(lái),例如/opt/all_venv/,并且針對(duì)不同的目錄做不同的事。
使用virtualenvwrapper管理你的虛擬環(huán)境(virtualenv),其實(shí)他就是統(tǒng)一管理虛擬環(huán)境的目錄,并且省去了source的步驟。
步驟1:安裝virtualenvwrapper

pip3 install virtualenvwrapper
步驟2:設(shè)置Linux的環(huán)境變量,每次啟動(dòng)就加載virtualenvwrapper
把下面兩行代碼添加到 ~/.bashrc文件中
打開(kāi)文件
vim ~/.bashrc
寫(xiě)入以下兩行代碼
export WORKON_HOME=~/Envs #設(shè)置virtualenv的統(tǒng)一管理目錄
source /opt/python34/bin/virtualenvwrapper.sh #執(zhí)行virtualenvwrapper安裝腳本
讀取文件,使得生效,此時(shí)已經(jīng)可以使用virtalenvwrapper
source ~/.bashrc

步驟3:基本使用virtualenvwrapper
創(chuàng)建一個(gè)虛擬環(huán)境:

$ mkvirtualenv my_django115

這會(huì)在 ~/Envs 中創(chuàng)建 my_django115 文件夾。

在虛擬環(huán)境上工作:激活虛擬環(huán)境my_django115

$ workon my_django115

再創(chuàng)建一個(gè)新的虛擬環(huán)境

$ mkproject my_django2

virtualenvwrapper 提供環(huán)境名字的tab補(bǔ)全功能。
當(dāng)有很多環(huán)境, 并且很難記住它們的名字時(shí),這就顯得很有用。

  • workon還可以任意停止你當(dāng)前的環(huán)境,可以在多個(gè)虛擬環(huán)境中來(lái)回切換

workon django1.15
workon django2.0

也可以手動(dòng)停止虛擬環(huán)境

deactivate

刪除虛擬環(huán)境,需要先退出虛擬環(huán)境

rmvirtualenv my_django115

步驟四:常用其他命令

lsvirtualenv

列舉所有的環(huán)境。

cd virtualenv
導(dǎo)航到當(dāng)前激活的虛擬環(huán)境的目錄中,比如說(shuō)這樣您就能夠?yàn)g覽它的 site-packages 。
cd sitepackages
和上面的類(lèi)似,但是是直接進(jìn)入到 site-packages 目錄中。
lssitepackages
顯示 site-packages 目錄中的內(nèi)容。

完整官網(wǎng)介紹:https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容