1. 程式人生 > >python + mod_wsgi + apache 部署用flask框架的py程式----window環境(親測成功)

python + mod_wsgi + apache 部署用flask框架的py程式----window環境(親測成功)

先說一下我花了多久,距離上一篇搭建好apache之後,花了我一天的時間搞定,現在回想起來其實也就5個部分,按我下列的幾個步驟來不出錯僅僅只需要15分鐘,這就是程式設計師的極易禿頂的原因,錯誤能把你磨到崩潰!!!

成功之後,我差點激動的要把電腦砸了!!!真特麼喜極而泣(誇張一點無所謂啦)!!!

如果你要參考我的部落格,請注意我會很羅嗦,但是我覺得你看仔細的話會少走一些彎路,因為很多大佬的部落格都是及其精簡,精簡到明明我跟著一步一步來了,結果還是出錯,因為有些情況大佬沒說,或者忘記說,或者根本沒時間寫那麼多~~~,總之你嫌羅嗦就直接看你想要的吧

Notice一下我搭建成功的環境是:windows

!!!linux跟mac可以借鑑不可照搬!!

apache2.4.37 (64位)+ python 3.5.3(64位) + (pip install mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl) + flask 

請保證你的apache和python都是統一的位數!!!要不然就是失敗!!!要換的64位的apache參考我的上一篇部落格

首先申明,我參考了很多大佬的部落格,也踩了很多大佬無意間留下的坑,,我說一下我解決了哪些坑,如果不是一開始就按我這篇文章部署flask的話 ,那你可以根據我踩的坑確定我下面的操作是否對你有用,一開始就按我這篇部落格來的,可以跳過這部分。

坑pool:

    第一,mod_wsgi怎麼安裝。我看的大部分教程都是很久了,對於apache擴充套件mod_wsgi模組他們推薦是去一些網站下載XXXXX.so,再loadModule進去,此方法在我看來對python3.x來說用不了,因為我沒找到對應版本的.so檔案,也有可能是linux或者mac版本才有.so檔案。所以就通過python安裝,但我沒用pip install mod_wsgi的方式,你要是成功那就ok,安裝失敗的話,就去下載對應的whl檔案(我下面有連結),通過pip install xxxx.whl檔案的方式。

     第二,通過上一步安裝的mod_wsgi怎麼新增到apache擴充套件裡面。參考我下面的操作,如果遇到新增我操作裡面的三句程式碼   之後不能啟動apache,說明你的python跟apache的位數對不上,直接來說就是不相容,具體錯誤去檢視apache的error.log(在apache目錄的logs檔案裡面),當然不排除其他可能,這裡面會有提示!!!

     第三,測試mod_wsgi報錯。有什麼string型別錯誤,有什麼不正確的結尾,如果你通過將第二(上一個)的坑,新增那三句程式碼併成功啟動apache,只能說明是你寫的測試檔案裡面的程式碼不對,比如你參考別的教程要求的xxx.wsgi。解決辦法就是請你手打我下面貼出來的測試檔案的程式碼,對的,或許就是你用複製的程式碼夾帶了一下你看不到的東西!!!除了這個就是拜託你仔細對面程式碼有沒有敲錯一個字元或者空格!!!

    第四,如果你通過了測試wsgi,即就是確定你的apache的wsgi能成功運行了,在你寫了一個簡單的flask程式測試的時候,報錯了,首先介面是500錯誤!!,檢視apache的錯誤日誌,如果是什麼找不到什麼檔案,檢視是不是你的路徑沒填對,我主要講的是importErro,no find module 'flask'!!!就是你當前的專案檔案家裡沒有找到你之前安裝好的module的資料夾,我百度,google很久了,沒找到怎麼讓它找到我們全域性安裝的site-pakeages的方法或者程式碼,你找到了,麻煩評論告知一下,謝謝。我用的是另一種方法----virtualenv,具體怎麼做看我下面的操作。用它就能單獨給一個專案配置module,麻煩的就是你需要重新按一遍你專案需要的module,所以在此先告誡大家,下次寫python專案,一開始就用virtualenv單獨給庫,提一句用pycharm寫python專案,設定一下就可以就可以很方便的安裝module,也可以用以前安裝好的,但是我沒設定成功,因為我建立的專案資料夾中的site-packages沒有那些module,這個也希望有心人寫篇優秀的部落格給我參考參考(我參考過其他人的都沒成功),在此謝謝了。

      第五,給apache配置虛擬訪問站點。就是讓你的flask專案能通過apache代理訪問,這裡就只需要在apache中定義一下就好了,如果你測試的時候伺服器報404錯誤,什麼forbidden,什麼no find錯誤,就是你的定義你專案的站點出錯了,具體還是參考我下面的操作~

過了這幾個坑 不出意外 基本上幾乎 就能成功,畢竟我沒遇到除此這外的錯誤型別,也可以評論問我,或許我也忘記說了呢,哈哈。

我基本上按照這位大佬的部落格來的(註明出處,以示尊重),跟我自己的情況作了修改和一些優化!!!

廢話說完了,開始我的表演~~

前提準備:

1.apache2.4.37(64位)   ----已安裝

2.python3.5.3(64位)   -----已安裝

3.mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl  點選這裡下載對應你自己python版本(注意是64位)的whl檔案!!!

準備好這幾樣就可以開始配置部署!(建議以下所有的操作命令及程式碼自己手打,別複製我的,因為你的可能跟我不一樣,要做相應的修改,別傻瓜式的複製,我吃過虧的!!!)

第一部分:專案環境搭建(python虛擬環境及python安裝mod_wsgi)

1.cmd 安裝 virtualenv(簡單來說就是給不同的python專案搭建一個它自身的虛擬環境,避免不同專案的包依賴衝突)

      pip install virtualenv            //提示安裝成功就好,失敗請百度解決

2.繼續用cmd操作:

      cd 到"你準備執行flask專案的資料夾",執行 "virtualenv venv" 命令,venv是你虛擬環境的名字,你可以取一個你愛聽的名字

                   

3.成功後,啟用你的虛擬環境  ---  (你自己取的虛擬環境名字)\Scripts\activate  (退出啟用的虛擬環境直接輸入回車deactivate就可以了)

                   

4.安裝flask模組 ---   pip install flask (解決ImportErro no find flask的問題在此,這樣這個專案中就有flask模組了,你專案需要的其他模組也可以在這裡一起安裝好)

                           

5.這時候你去看的專案的資料夾會有一個venv(你的應該是你取得愛稱)

6.把我之前說要準備好的mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl複製到這裡,在進行安裝,也可以放在venv中,隨你。只是在安裝的時候要在虛擬環境中進到相應的資料夾中,例如我的就放在venv下,還需要cd到venv中,具體看圖:進入到whl檔案所在的資料夾,執行 ---- pip install  "mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl"(這個雙引號我是按快捷鍵tab補全名字它自動加的,不要糾結這個)

7.成功後第一部分完成,你已經成功了33%,繼續努力!!! 對了先別關掉這個cmd介面喲,你手快當我沒說

第二部分:配置apache的wsgi擴充套件,及測試是否配置成功

1.繼續操作之前的cmd介面(你如果關了的話,按之前的操作進入到虛擬環境吧)

進入虛擬環境的 venv的Scripts資料夾執行    --- mod_wsgi-express module-config

複製出現的三句程式碼到 apache的配置檔案httpd.conf,放最下面就好了。

現在重啟你的apache服務,如果啟動不了,你的python跟apache怎麼還是不同位數啊????

啟動之後說明apache成功載入python安裝的mod_wsgi,但是還是要測試一下

在你專案的根目錄,建立一個test.wsgi檔案,比如我的:

寫如下程式碼:

def application(environ,start_response):
    status = "200 Ok"
    output = b"Hello wsgi"
    response_headers=[('Content-type','text/plain'),('Content-Length',str(len(output)))]
    start_response(status,response_headers)
    return[output]

有些同學參考其他大佬的文章總是報錯string型別錯誤,是因為output = b"Hello wsgi"是要轉位元組型的而不是string,加前面b就好了

然後再apache的配置檔案httpd.conf,最後面加下面的程式碼:

<VirtualHost *:80>
	DocumentRoot 你的專案路徑
	WSGIScriptAlias /(這裡可以取別名,我沒有取) 你的專案路徑\test.wsgi
	<Directory '你的專案路徑'>
		AllowOverride AuthConfig FileInfo
		Require all granted
		Order allow,deny
		Allow from all
	</Directory>
</VirtualHost>

ok,重啟apache!!!在瀏覽器中輸入 localhost/(你設定的別名) ,出現hello wsgi,就代表你成功了

第三部分:部署flask,測試!!!

這一步其實很簡單了,首先我們寫一個簡單的flask程式,作為測試,你也可以用你自己寫好的flask程式。

在專案的資料夾中,建立一個test.py

注意!!是跟test.wsgi在同一個資料夾中,如果不放在一起,需要注意一下引用路徑,有需求的自行百度。

test.py:

from flask import Flask
app = Flask(__name__)


@app.route("/test")
def index():
	return "hello flask"

if __name__ == '__main__':
	app.run()

apache的httpd.conf中之前配置的站點不用改變,我們只需要修改好wsgi中的程式碼,如下:

import sys
sys.path.insert(0,'你專案的路徑')
from test import app as application

最好重啟一下apache,訪問localhost/test,就能出現hello flask的字樣了。

就這樣我們成功的用apache的mod_wsgi部署我們寫的flask程式。