flask編譯成pyc部署
⑴ 如何部署簡單python + flask應用
我們先寫一個最基本的flask應用:
demo.py
from flask import Flask
app = Flask(**name**)
@app.route('\')
def index():
return 'Hello World.'
if __name__ == __main__:
app.run()
運行這個py文件,打開瀏覽器訪問127.0.0.1:5000就能看到顯示Hello World的頁面 .
如果讓這個flask引用監聽來自公網ip的請求,理論上你跑此程序的機器就相當於一個伺服器了,然而這個伺服器並不完美,所以我們需要nginx和gunicorn來增加它的功能,讓它真刀真槍上生產環境的時候能按要求運行。
flask自帶的WSGI框架性能很差勁,只能適用於開發環境調試使用。我們用專業一點的gunicorn(還有很多其他優秀的框架)替代flask自帶的WSGI框架。
配置完後,通過命令』/usr/local/bin/gunicorn -b127.0.0.1:5000『啟動應用。打開瀏覽器訪問127.0.0.1:5000,同樣能夠得到返回頁面
然而gunicorn也僅僅是一個python的WSGI框架而已,要讓它真正處理來自互聯網的各類訪問功能還是有點欠缺,這時候就需要用到大名鼎鼎的nginx 伺服器來替gunicorn遮風擋雨了。
Ubuntu下安裝nginx可以用命令
sudo apt-get install nginx
安裝後需要進行下配置:
cd /etc/nginx/sites-available
sudo vi test (test為配置名稱,可以根據自己項目進行命名)
test文件的配置為:
server {
listen 80; # 監聽80埠
location / {
proxy_pass http://127.0.0.1:5000; # 代理本機127.0.0.1:5000的服務
}
location /static {
alias /home/ubuntu/myproject/myblog/app/static; # 負載均衡
}
}
cd ..
cd sites-enable
sudo ln -s ../sites-available/lwhile . (創建軟鏈接,別漏掉最後的.)
sudo service nginx reload
sudo service nginx restart
這樣nginx的基本配置文件就寫好了 接下來我們配置進程管理工具supervisor supervisor可以在後面啟動你的python進程,這樣很方便
1.cd /etc/supervisor/conf.d
2.sudo vi test.conf (test為文件名)
[program:test]
command = /usr/local/bin/gunicorn -b127.0.0.1:5000 /home/ubuntu/myproject/test.py
3.sudo supervisorctl
4.reload
5.start test
如果一切正常,做完這所有步驟之後,現在公網的ip訪問你的主機,就可以打開你的flask應用了
⑵ gunicorn部署Flask服務
作為一個Python選手,工作中需要的一些服務介面一般會用Flask來開發。
Flask非常容易上手,它自帶的 app.run(host="0.0.0.0", port=7001) 用來調試非常方便,但是用於生產環境無論是處理高並發還是魯棒性都有所欠缺,一般會配合WGSI容器來進行[生產環境的部署][1]。
小磊哥推薦了參考文章[1]中的部署方式,希望將已有的服務放到gunicorn或者Tornado中部署,並用supervisor來管理所有進程(有幾個不同的服務)。
經過調研和嘗試
首先pip安裝gunicorn。
pip install gunicorn --user
由於是部署在公司雲主機上,通常不會給root許可權。之前都是提工單給SA sudo裝的,後來發現更安全也更方便的方法是 pip install xxx --user ,美中不足是安裝完以後需要 手動添加PATH
export PATH=/home/username/.local/bin:$PATH
方便起見可以加到 ~/.bash_profile 中
簡單地,gunicorn可以通過 gunicorn -w 4 -b 127.0.0.1:4000 run:app 啟動一個Flask應用。其中,
其中run.py中文件的可能形式是:
通過 gunicorn -h 可以看到gunicorn有非常多的配置項,因此通常會寫成一個config.py文件來進行配置。看了一下文檔似乎沒有給出正確的config.py中配置項的命名,並且有些博客博主給出的配置項命名是錯誤的,導致配置沒有生效,踩了不少的坑(我找不到那篇坑坑的文章了)。這篇博客[2]給出了一些比較常用且 正確 的配置。
我所用項目的配置項如下:
生產環境不需要這個配置項,但調試的時候還是挺好用的。而且,開啟debug項後,在啟動gunicorn的時候可以看到所有可配置項的配置,如下所示。
之前在被上一篇博主欺騙的時候,仔細看了調試信息,發現 accesslog 和 errorlog 都沒有被配置,所以導致啟動以後看不到任何日誌。
config.py中只需要配置需要修改的項的,大部分採用默認配置即可。默認配置的具體配置內容可以通過 gunicorn -h 來查詢。
* 配置文件和調試信息來自兩個不同進程,因此信息可能有細微差異
worker_class是指開啟的每個工作進程的模式類型,默認為sync模式,也可使用gevent模式。
workers 是工作進程數量,在上述 config.py 中,取的是CPU的數量。需要注意部署機器的性能,不能無限制多開。多篇文章中推薦了 multiprocessing.cpu_count() * 2 + 1 這個數量,考慮到我會在一個機器上部署兩個服務,因此數量減半。
daemon = True 意味著開啟後台運行,默認為 False
gunicorn的環境配置和使用都比較簡單,也解決了我總是用nohup python run.py >out.log 2>&1 &來啟動Flask後台服務的問題。
在採用gunicorn部署之前,我也對後台服務的目錄結構進行了調整。雖然只是便利工作的服務,也希望可以盡可能變的更加professional~
傳送門: Flask目錄調整
參考文章:
[1] https://eclipsesv.com/2016/12/12/flask 部署方式實踐
[2] http://blog.csdn.net/zs_2014/article/details/41249347
⑶ 怎麼在linux系統下部署flask
Python基礎、列表、類、函數、模塊。HTML/CSS (基礎)。
學習這篇教程你不必是一個python高級開發者,但是首先我建議你閱讀https://wiki.python.org/moin/BeginnersGuide/NonProgrammers 。
在Linux上安裝Python 3
在大多數Linux發行版上Python是默認安裝的。下面的你命令可以讓你看到安裝的版本。
⑷ python .pyc是什麼文件
一、什麼是pyc文件?
pyc文件就是py程序編譯後得到的文件,是一種二進制文件。一般是這樣的:
pyc文件經過python解釋器最終會生成機器碼運行。所以pyc文件是可以跨平台部署的,類似java的.class文件。如果py文件改變,也會重新生成pyc文件。
相關推薦:《Python視頻教程》
二、pyc文件怎麼生成的?
1、被當做模塊調用的時候會自動生成pyc文件。
一般是python腳本被當做模塊被其他腳本文件調用時,就會產生pyc文件,舉個例子:
如果你寫了一個腳本文件image.py是用來生成驗證碼的,如果你在index.py文件中想引用這個腳本的功能,就需要通過import導入image.py文件,然後,如果你運行index.py文件,那就會在image.py文件所在的路徑生成一個image.pyc文件。
2、對於py文件,可以執行下面命令來生成pyc文件。
3、通過代碼來生成pyc文件。
三、為什麼要生成pyc文件?
1、python為了提高運行效率也會進行編譯。
python是解釋型語言,運行的時候需要通過python解釋器編譯,所以先編譯出pyc文件後,可以節省編譯這一步的耗時時間。
2、不想讓源碼泄露。
因為py文件是可以直接看到源碼的,對於一般的商業公司來說,這有點不妙,因為pyc文件可以獨立於py文件,刪除py文件也不會出錯。這就是太好了,只需要編譯成pyc文件再發布出去就好了。
⑸ 新浪雲怎麼部署 python flask
首先安裝python,這個我就不多說了,記得配置好系統的環境變數,python和python包(Scripts目錄)都要加入系統的環境變數。
接下來就pip安裝flask,windows下的命令為:
$ pip install flask
接下來創建一個文件夾,就是你將來整個工程的文件。通過cmd命令進入到這個文件夾中。(cd命令)
然後在這個文件夾中創建一個python文件,py為後綴的文件。
接下來編輯這個文件(文本編輯器、IDE都可以)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '
Hello World!
'
if __name__ == '__main__':
app.run(debug = True)
寫入代碼就可以簡單的啟動伺服器了,默認根目錄下返回「hello,world!」,如何運行的就只需要在cmd中運行
$ python myapp.py
運行成功的話可以看到下圖的提示。
訪問localhost:5000的時候(默認埠5000,可以通過host參數修改),例如
app.run(debug=True,host='0.0.0.0:5000')
基本上這樣完成了flask的基本配置,接下來就是將其放到新浪雲SAE上,SAE本身就支持flask框架的部署,但是後期我們需要引入其他的一些第三方的包,因此最好就是講自己的包放到工程文件中調用。
方法就是在使用pip安裝的時候,使用這樣子的命令:
$ pip install -t vendor PACKAGENAME
這個樣子在本地安裝的時候就會將包放在一個vendor文件夾中,然後安裝SAE官方的文檔,在工程文件中添加一個名為「index.wsgi」的文件,內容為:
import sae
sae.add_vendor_dir('vendor')
from myapp import app
application = sae.create_wsgi_app(app)
這樣子基本就完成了,只需要講文件上傳到SAE上就可以完成部署。
SAE上的操作記得在新建應用的時候選擇python2.7,然後我用的代碼管理方式是git。
接下來的方式就是git的內容了,這里我就不多說,寫下幾個命令:
將倉庫的內容復制到本地
$git clone 你的git倉庫地址
創建分支
$git branck 分支名
使用分支
$git checkout 分支名
修改代碼
$git add --all
$git commit -a "注釋"
$git pust 分支名
(以前都是用svn的所以git還不是特別熟)
部署上傳完代碼之後就可以好好折騰啦
⑹ 阿里雲伺服器部署flask項目
當我們執行下面的hello.py時,使用的flask自帶的伺服器,完成了web服務的啟動。在生產環境中,flask自帶的伺服器,無法滿足性能要求,我們這里採用Gunicorn做wsgi容器,來部署flask程序。Gunicorn(綠色獨角獸)是一個Python WSGI的HTTP伺服器。從Ruby的獨角獸(Unicorn )項目移植。該Gunicorn伺服器與各種Web框架兼容,實現非常簡單,輕量級的資源消耗。Gunicorn直接用命令啟動,不需要編寫配置文件,相對uWSGI要容易很多。
區分幾個概念 :
WSGI:全稱是Web Server Gateway Interface(web伺服器網關介面),它是一種規范,它是web伺服器和web應用程序之間的介面。它的作用就像是橋梁,連接在web伺服器和web應用框架之間。
uwsgi:是一種傳輸協議,用於定義傳輸信息的類型。
uWSGI:是實現了uwsgi協議WSGI的web伺服器。
我們的部署方式: nginx + gunicorn + flask
web開發中,部署方式大致類似。簡單來說,前端代理使用Nginx主要是為了實現分流、轉發、負載均衡,以及分擔伺服器的壓力。Nginx部署簡單,內存消耗少,成本低。Nginx既可以做正向代理,也可以做反向代理。
正向代理 :請求經過代理伺服器從區域網發出,然後到達互聯網上的伺服器。
特點 :服務端並不知道真正的客戶端是誰。
反向代理 :請求從互聯網發出,先進入代理伺服器,再轉發給區域網內的伺服器。
特點 :客戶端並不知道真正的服務端是誰。
區別 :正向代理的對象是客戶端。反向代理的對象是服務端。
查看命令行選項 : 安裝gunicorn成功後,通過命令行的方式可以查看gunicorn的使用信息。
直接運行 :
指定進程和埠號 : -w: 表示進程(worker)。 -b:表示綁定ip地址和埠號(bind)。--access-logfile:表示指定log文件的路徑
作為守護進程後台運行 :
阿里雲伺服器默認安裝到 /user/sbin/ 目錄,進入目錄,啟動 ngnix:
Ubuntu 上配置 Nginx 也是很簡單,不要去改動默認的 nginx.conf 只需要將/etc/nginx/sites-available/default文件替換掉就可以了。
新建一個 default 文件,添加以下內容:
修改完成後重啟nginx即可。
Ubuntu 上配置 Nginx 另一種方法,cd 到 /etc/nginx/conf.d 文件夾,新建 xxx.conf 文件(xxx 可以是項目名,只要是 .conf 文件即可),寫入以下內容:
需要監聽 https 請求時,寫入以下內容:
⑺ 關於一些python的web框架,flask在apache上面部署的問題。按官方和百度查到的教程去操作都是不可以..
應該 是你那個APP WSGI程序中的PATH不夠對。 你沒有把真正的FLASK的路徑加上去。
TEST與MOD——WSGI是不同的。TEST上測試沒有用。
你試試把DIST——PACKATGES或者是SITE——PACKAGTES里的FLASK目錄加上去試試
⑻ 如何部署簡單python + flask應用
python是一款應用非常廣泛的腳本程序語言,谷歌公司的網頁就是用python編寫。python在生物信息、統計、網頁製作、計算等多個領域都體現出了強大的功能。python和其他腳本語言如java、R、Perl 一樣,都可以直接在命令行里運行腳本程序。工具/原料
python;CMD命令行;windows操作系統
方法/步驟
1、首先下載安裝python,建議安裝2.7版本以上,3.0版本以下,由於3.0版本以上不向下兼容,體驗較差。
2、打開文本編輯器,推薦editplus,notepad等,將文件保存成 .py格式,editplus和notepad支持識別python語法。
腳本第一行一定要寫上 #!usr/bin/python
表示該腳本文件是可執行python腳本
如果python目錄不在usr/bin目錄下,則替換成當前python執行程序的目錄。
3、編寫完腳本之後注意調試、可以直接用editplus調試。調試方法可自行網路。腳本寫完之後,打開CMD命令行,前提是python 已經被加入到環境變數中,如果沒有加入到環境變數,請網路
4、在CMD命令行中,輸入 「python」 + 「空格」,即 」python 「;將已經寫好的腳本文件拖拽到當前游標位置,然後敲回車運行即可。
⑼ Flask + Nginx + Gunicorn + Gevent部署
==本教程僅適用於Linux和Mac==
部署是建立在你已經基本完成開發的基礎上,所以Python的安裝什麼的就不再進行說明了,上述依賴的安裝也不再贅述,請根據自己的平台查找安裝教程,這里主要對配置進行說明。
Gunicorn的配置相比於uWSGI簡單了很多,基本上一行命令就可以把項目跑起來。性能上據說uWSGI更加強大一些,不過在差距上並不明顯, 至少在我的日常使用中沒有因為Gunicorn出現過性能瓶頸,真的到了那一天再進行更換也不是什麼特別麻煩的事情。
在項目跟目錄創建一個gunicorn.py文件,當然名字和文件位置你可以進行更改。
這里我們採用gevent模式來支持並發,可以根據你自己的實際情況來進行模式選擇。我最近的項目因為阻塞主要是對SAP數據查詢導致的,所使用的庫並不是純Python編寫,也沒有說明支持協程,所以我我採用了gthead模式。
首先我們調用了gevent的Monkey Patch黑科技,該方法hook了標准卡裡面的大部分阻塞操作,使得在我們進行長時間IO操作時可以切換到別的協程,從而實現非同步並發。然後我們創建log目錄,設置log路徑,設置埠什麼的。
接著我們設置worker的數量,也就是進程數,通常設置為伺服器核心數2倍+1,這也是官方文檔事例中的配置。最後再設置一下worker的模式,這里填寫的就是前文所說的gevent。
更多項目配置請參照官方文檔
http://docs.gunicorn.org/en/latest/configure.html#
不管你是用flask-script還是flask-cli來啟動項目,一定會有一個入口文件(這名字一定很不規范),裡面創建並啟動了Flask App實例。這里再創建一個程序入口,這個入口專門為Gunicorn服務,用來啟動生產環境。
再根目錄創建一個wsgi.py文件,名字目錄還是可以隨意更改。
這里和你普通的程序入口並沒有什麼區別,中間對logger的一頓操作是把app的logger修改為gunicorn的,這樣我們再上一步設置的log路徑才能生效。
測試配置是否正確最簡單的方法就是跑一下。
如果你是用了虛擬環境,首先要先進入虛擬環境(這里強烈建議使用虛擬環境,我還是使用傳統的virtualenv)。
然後執行命令:
gunicorn.py和wsgi:application根據前兩部的文件名和變數名自行更改
Uninx哲學,沒有消息就是最好的消息,如果沒有報錯,程序就順利跑起來了。這時如果有圖形界面或者設置的埠是開放給外網的,你就可以訪問項目試試看是否成功運行,如果無法通過外網訪問並沒有圖形界面,也可以通過wget命令進行測試,請確保這個步驟正確再進行下一步操作。如果這一步順利完成,就可以Ctrl+C退出了,因為我們不需要手動啟動項目,接下來我們將通過Supervisor來幫助我們管理項目的進程。
Supervisor是一個用Python編寫的進程管理工具,我們這里通過他來管理我們的項目進程,開啟關閉啥的。
首先檢查是否存在配置文件,一般配置文件的路徑是
如果配置文件不存在,我們可以通過命令來生成
配置文件的內容很多,項目配置可以參照官網文檔
http://www.supervisord.org/introction.html
打開配置文件的最後一行
默認一般是注釋掉的,我們可以取消注釋,這行配置的作用也很淺顯,就是導入設置的路徑下的所有conf文件,這使得我們如果有多個項目可以不用都寫在同一個配置文件里,可以一個項目一個配置文件,更適合管理。這里的路徑也是可以按照實際需求隨意更改。這里需要重啟Supervisor服務,我剛開始做的時候都是直接重啟伺服器,不過如果你沒有把Supervisor自啟動,重啟後需要手動啟動Supervisord
在設置的路徑下新建一個配置文件,命令請根據上一步設置的擴展名。
project_name按照你的實際需求修改,作為你這個服務的唯一標識,用於啟動停止服務時使用。
command修改為測試gunicorn時使用的命令,這里我因為使用了虛擬環境,所以我使用了絕對路徑,指向了虛擬環境的gunicorn,這種配置我個人還是喜歡都使用絕對路徑。
directory指定了工作路徑,通常設置為項目根目錄,我們填寫的gunicorn.py和wsgi都是基於這個路徑的。
更多配置請參照官網的配置文檔。
管理Supervisor的項目是使用supervisorctl命令,我們可以啟動項目試試看
如果沒有報錯,應該可以和上一步測試gunicorn一樣可以正常訪問項目了。
Nginx的各種好處就自行查詢吧,我們這里就做一下簡單的配置。
因為我的項目一般都是前後端分離的,所以這里這里還會配置CORS來解決跨域的問題
這里就不細說了,整段貼出來,說一下其中一些重點
add_header相關設置主要是CORS,解決跨域的
第一第二行末尾加了always作用是默認CORS只對2XX狀態碼有效,如果你用4XX或者別的錯誤狀態返回結果依舊會提示跨域,所以加上always使得所有狀態都可以正確返回。
Allow-Methods:請根據直接用到的請求方式進行設置,OPTIONS一定需要加上。
Allow-Headers:如果你在header的頭部加上了自定義欄位,請在這里也加上。
、、、
if ($request_method = 'OPTIONS') {
return 204;
}
、、、
CORS在進行POST請求前會發一次OPTIONS請求試探試探,這里我們只要檢測到OPTIONS請求,我們就返回204,告訴瀏覽器來吧來吧。
proxy_pass就是設置Nginx轉發的地址,也就是設置成Gunicorn設置的地址和埠
proxy_set_header請根據你設置Nginx Server的埠填寫
最後重啟一下Nginx就可以了
看著步驟很多,其實除了Gunicorn都不是必須的,Supervisor和Nginx你要是不想使用其實也可以不使用,我說得比較啰嗦,不過其實很容易。
⑽ flask項目在Linux上部署
有兩種部署方式:
目錄下必須有程序入口wsgi.py 或者是 run.py
創建一個app.ini文件
命令行:
啟動成功之後會有一個.pid文件