[if !supportLists]1?[endif]虛擬環(huán)境
[if !supportLists]1.1?[endif]安裝虛擬環(huán)境
使用Python進行項目開發(fā)時土思,由于不同的項目需要务热,可能會配置多個開發(fā)環(huán)境,不同開發(fā)環(huán)境之間的項目依賴包如果混合在一起己儒,可能會引起意想不到的錯誤崎岂。
通過虛擬環(huán)境隔離不同開發(fā)環(huán)境,方便不同開發(fā)環(huán)境的共存闪湾。
#安裝python虛擬環(huán)境
sudo apt install?-y?virtualenv
#vrtaulenvwrapper是virtualenv的擴展包冲甘,用于更方便管理虛擬環(huán)境
sudo apt install -y virtualenvwrapper
[if !supportLists]1.2?[endif]配置虛擬環(huán)境
此時還不能使用virtualenvwrapper,實際上你需要運行virtualenvwrapper.sh文件才行。
配置步驟如下:
1江醇、查看virtualenvwrapper的安裝路徑
sudo find / -name virtualenvwrapper.sh
2濒憋、創(chuàng)建目錄用來存放虛擬環(huán)境
mkdir ~/.myvirtualenvs
3、在~/.bashrc中添加行
export WORKON_HOME=/home/yong/.myvirtualenvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
4陶夜、運行: source ~/.bashrc
此時virtualenvwrapper就可以使用了凛驮。
[if !supportLists]1.3?[endif]virtualenvwrapper的功能
配置好virtualenvwrapper,就可以使用它的功能条辟,方便管理虛擬環(huán)境
workon: ????????列出虛擬環(huán)境列表
lsvirtualenv: 列出虛擬環(huán)境列表
mkvirtualenv: 新建虛擬環(huán)境
workon [虛擬環(huán)境名稱]: 切換/進入虛擬環(huán)境
rmvirtualenv : ????刪除虛擬環(huán)境
deactivate: 離開虛擬環(huán)境
[if !supportLists]1.4?[endif]創(chuàng)建虛擬環(huán)境
進入本地虛擬環(huán)境的目錄文件夾
cd ~/.myvirtualenvs/
創(chuàng)建虛擬環(huán)境 根據(jù)需要選擇3和2
mkvirtualenv -p /usr/bin/python3 ?py3
mkvirtualenv -p /usr/bin/python ?py2
進入虛擬環(huán)境
workon virtualenv-django
查看虛擬環(huán)境中已經(jīng)安裝的包
pip list
pip freeze
[if !supportLists]2?[endif]uwsgi
UWSGI是一個Web服務(wù)器黔夭,它實現(xiàn)了WSGI協(xié)議、uwsgi羽嫡、http等協(xié)議本姥。Nginx中HttpUwsgiModule的作用是與uWSGI服務(wù)器進行交換。
要注意WSGI / uwsgi / uWSGI這三個概念的區(qū)分厂僧。
[if !supportLists]??[endif]WSGI是一種通信協(xié)議扣草。
[if !supportLists]??[endif]uwsgi是一種線路協(xié)議而不是通信協(xié)議,在此常用于在uWSGI服務(wù)器與其他網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù)通信颜屠。
[if !supportLists]??[endif]而uWSGI是實現(xiàn)了uwsgi和WSGI兩種協(xié)議的Web服務(wù)器辰妙。
uwsgi協(xié)議是一個uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型(type of information)甫窟,每一個uwsgi packet前4byte為傳輸信息類型描述密浑,它與WSGI相比是兩樣?xùn)|西。
[if !supportLists]2.1?[endif]安裝
[if !supportLists]??[endif]安裝依賴
sudo apt-get -y install build-essential python3-dev python-pip curl
[if !supportLists]??[endif]pip命令安裝粗井,這里應(yīng)該在python3的虛擬環(huán)境里安裝
pip install uwsgi
[if !supportLists]??[endif]下載安裝腳本尔破,將uwsgi二進制安裝到家目錄下,你可以修改它浇衬。
sudo curl http://uwsgi.it/install | bash -s default /home/yong/uwsgi
sudo mv /home/yong/uwsgi /usr/local/sbin/
[if !supportLists]2.2?[endif]使用
[if !supportLists]??[endif]新建服務(wù)wsgi協(xié)議的邏輯代碼server.py
def application(environ, start_response):
????body = '<h1>Hello,World!</h1>'
????start_response('200 OK', [('Content-Type', 'text/html')])
return body.encode('utf-8')
environ:請求信息組成的字典
start_response:處理響應(yīng)
[if !supportLists]??[endif]運行
uwsgi --http :9090 --wsgi-file server.py
然后打開瀏覽器懒构,訪問”http://localhost:9090″,你就可以看到”Hello World!”字樣了耘擂。
上面的命令中”- -http”參數(shù)指定了HTTP監(jiān)聽地址和端口胆剧,”- -wsgi-file”參數(shù)指定了WSGI應(yīng)用程序入口,uWSGI會自動搜尋名為”application”的應(yīng)用對象并調(diào)用它醉冤。
更進一步秩霍,uWSGI可以支持多進程和多線程的方式啟動應(yīng)用,也可以監(jiān)控應(yīng)用的運行狀態(tài)蚁阳。我們將啟動的命令改為:
uwsgi --http :9090 --wsgi-file server.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
執(zhí)行它后铃绒,uWSGI將啟動4個應(yīng)用進程,每個進程有2個線程螺捐,和一個master主進程(監(jiān)控其他進程狀態(tài)颠悬,如果有進程死了矮燎,則重啟)。同時椿疗,你可以訪問”127.0.0.1:9191″來獲取JSON格式的應(yīng)用運行信息漏峰,uWSGI還提供了工具命令”uwsgitop”來像top一樣監(jiān)控應(yīng)用運行狀態(tài)糠悼,你可以用pip來安裝它届榄。
上面的命令參數(shù)太多了,我們可以將參數(shù)寫在配置文件里,啟動uWSGI時指定配置文件即可倔喂。配置文件可以是鍵值對的格式铝条,也可以是XML,YAML格式席噩,這里我們使用鍵值對的格式班缰。讓我們創(chuàng)建一個配置文件”myapp.ini”
http=:9090
wsgi-file=server.py
master=true
processes=4
threads=2
stats=127.0.0.1:9191
然后就可以將啟動命令簡化為:
uwsgi myapp.ini
使用uwsgi的時候需要進入python3的虛擬環(huán)境,默認是調(diào)用python2悼枢。
[if !supportLists]2.3?[endif]案例
完成電商里的商品管理模塊埠忘。
http://ip:port/show 查詢所有
http://ip:port/show/1 查詢id=1
?????"2