天天看點

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

2020年最新apache2.4 + flask + python3.8 + windows的部署

在參考了許多apache的部署文章之後,寫下這篇部落格記錄一下部署的完整過程和所遇到的問題(bug)
(注:該方法已成功部署)
           
  • 首先是所需要的環境
  • python3.8版本
  • apache2.4版本 + mod_wsgi版本
  • flask項目
  • Windows 10
需要注意的是:python版本、apache版本、mod_wsgi版本,這三個版本需要一一對應

下文就按照三大部分講解

第一大部分:python3.8版本的下載下傳和安裝

python下載下傳的是3.8.3(32位win)版本

我下載下傳的是python的3.8.3版本的解釋器,按照自己作業系統是幾位的來下載下傳幾位的python解釋器,一般電腦都是32位和64位,如果安裝64位版本的python解釋器在32位的電腦上就無法相容了,是以建議安裝32位的python版本

檢視電腦的作業系統位數:桌面–> 你的電腦圖示右鍵屬性

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署
python3.8.3的下載下傳位址:https://www.python.org/downloads/

進入位址找到32位版本的python3.8.3

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

下載下傳之後自定義安裝到c盤的python38上面:c:\python38

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

安裝完成之後,檢視安裝的python資訊,注意:如果電腦上面又多個不同版本的解釋器,直接進入c:\python38目錄,輕按兩下打開python.exe檔案就可以打開新安裝的python了

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

紅框裡表示安裝的是32位的

  • apache2.4版本的下載下傳和安裝
  • apache下載下傳
  • 注意:apache版本的下載下傳需要與python3.8.3的版本對應起來,上面紅色框裡面的MSC v.1925就是_MSC_VER值,需要找到對應的Visual Studio版本
1925 對應的是 16.5 是以知道對應的apache版本是vc16

這裡就不做過多解釋了,要了解對應關系,自行去查找

_MSC_VER值對應的Visual Studio版本,最新的對應版本可去微軟官網,連結:Predefined macros
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署
apache下載下傳位址:http://httpd.apache.org/docs/current/platform/windows.html#down
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

ApacheHaus還沒有最新的vc16版本,是以我去Apache Lounge中找到了對應的vc16(32位win)版本下載下傳,有可能Apache Lounge這個網址打不開,無法下載下傳到最新版本,下載下傳不到文末可以給我留鹽

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

第二大部分:安裝apache和mod_wsgi子產品

解壓apache的下載下傳檔案,把Apache24檔案夾複制到D或者H盤的根目錄下(我的是H盤):H:\Apache24

> 1、更改httpd.conf檔案

找到apache目錄H:\Apache24\conf下的httpd.conf檔案,用編輯器打開(txt),更改37行的路徑為
  自己的apache的路徑:“H:\Apache24”,更改60行的80端口為18000,最好是1024以上的端口,80  端
  口經常被系統的服務占用,行數不對的話,自己去找
           

下這兩行的資料來更改一下

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署
> **2、以管理者身份運作cmd(右鍵點選cmd,看到管理者身份運作),進入H:\Apache24\bin目錄下**,輸入指令

	    > httpd -k install	         -->    安裝

	    > httpd -k start            -->    啟動
	    
	    > httpd -k start            -->    重動

	    > httpd -k stop             -->    停止

	    > httpd -k uninstall        -->    解除安裝


	在安裝完成之後,輸入httpd -k start就可以啟動apache服務了,輕按兩下bin目錄下的
	ApacheMonitor.exe就可以
	看到apache的狀态了,右邊可以手動控制apache服務
           
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署
> 3、apache服務啟動之後,在浏覽器輸入***localhost:18000***,顯示It works!表示通路成功
           
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署
  • 下載下傳和安裝mod_wsgi

    mod_wsgi子產品可以實作WSGI标準,WSGI是一個同一的python接口标準,該标準講述了python應用如何與web伺服器通信,mod_wsgi子產品可以實作python應用與web伺服器之前的聯系

mod_wsgi下載下傳位址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

mod_wsgi說明文檔:https://dormousehole.readthedocs.io/en/latest/deploying/mod_wsgi.html

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

下載下傳完成之後,把檔案複制到python的安裝目錄的Scripts目錄下:C:\python38\Scripts

打開cmd,進入C:\python38\Scripts執行指令:

pip install mod_wsgi-4.7.1-cp38-cp38-win32.whl
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

安裝完成後,繼續輸入以下指令,把生成的3行代碼複制到apache的httpd.conf配置檔案中,進行apache配合mod_wsgi子產品使用

mod_wsgi-express module-config
2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

複制3行代碼到apache的httpd.conf配置檔案中:

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

第三大部分:建立Flask小項目

下面分3個步驟講解

第一步:寫個簡單Flask的例子:

from flask import Flask


application = Flask(__name__)

@application.route('/demo')
def test():
    return '無窮雞蛋'

application.run(debug=True)
           

python3.8版本運作Flask項目的時候會運作出錯,如下錯誤:

原因因為 werkzeug 庫新版本裡需要顯式導入該子產品,是以找到werkzeug 庫的路徑:

C:\python38\Lib\site-packages\werkzeug\__init__.py
# 添加如下代碼,手動導入子產品
from werkzeug.utils import cached_property
           

如圖,就可以解決錯誤了:

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

第二步:編寫wsgi檔案

wsgi檔案可以通過mod_wsgi子產品把flask項目和apache服務連接配接起來

import sys

sys.path.insert(0, "H:\pythonpro\Runflask")  # 添加項目路徑到python解釋器的搜尋路徑中
from testt import application  # 這裡必須是application
           

如果項目裡面的不是application的話,還可以這樣寫:

from testt import app as application
# 或者是寫成
from testt import app
application = app
           

第三步:添加wsgi檔案的路徑到apache服務的httpd.conf檔案中

在httpd.conf檔案中,把下面的文本複制進去,把路徑和端口資訊改為你自己的資訊。一般在文本的最後添加這個資訊,部署多個項目,可以添加多個這個文本,把路徑和端口資訊改為項目的資訊

Listen 18001
<VirtualHost *:18001>
     WSGIScriptAlias / H:\pythonpro\Runflask\tesk.wsgi
     <Directory "H:\pythonpro\Runflask">  # 注意這裡不加雙引号可能會出錯,有的電腦不加也可以
         WSGIApplicationGroup %{GLOBAL}
         Require all granted
     </Directory>
</VirtualHost>
           

解讀:

Listen 18001:這裡是監聽18001端口,可以監聽多個端口 <VirtualHost

<VirtualHost *:18001>:這裡的18001端口是進入你項目的端口,但是沒有Listen監聽的端口的話,這裡面的内容不會生效
WSGIScriptAlias / H:\pythonpro\Runflask\tesk.wsgi:這裡的WSGIScriptAlias / 是固定的,斜杠不能去掉,後面的路徑表示的是wsgi檔案的路徑,這裡告訴apache去這個路徑找到wsgi檔案
<Directory"H:\pythonpro\Runflask">:這裡表示的是項目的路徑

後面這兩項是必填的:

WSGIApplicationGroup%{GLOBAL}

Require all granted

再多說一下:這個文本的端口是多少,浏覽器通路的端口就是多少,會重定向到你的項目,無論你項目裡面寫的端口是多少

我的項目目錄結構如下:

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

檢視項目是否部署成功

通路位址:http://localhost:18001/demo

如下圖,表示通路成功,部署成功了,通路位址的時候,記得要加 /demo ,項目裡面的路由是/demo

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

部署遇到的問題

一般都是自己粗心造成的錯誤,下面列舉一些遇到的錯誤:

以下問題是我總結了自己說的,當時部署的時候問題解決了,現在複現不了,沒有截圖,是以總結一下

一、位址通路正确了,但是會報錯(具體錯誤具體分析)。在apache安裝目錄下的logs檔案下的error.log裡面可以檢視錯誤日志,遇到問題的解決步驟:

1、首先檢查apache服務是否安裝成功,能否啟動成功,顯示It works!表示通路成功

2、在pycharm中運作項目,看下是否能通路正常,通路失敗,說明項目有bug未解決,apache部署不成功

3、在pycharm成功運作通路項目後,如果項目正常運作沒有bug的話,查找下個問題的思路是查找wsgi檔案是否編寫正确,wsgi檔案編寫不正确會影響是否能通路項目是否成功,如何檢視?

例如:

import sys
sys.path.insert(0, "H:\pythonpro\Runflask")  # 檢查添加路徑這裡,含有\t,\n,\f等,都不行,一般在路徑前面加上r來防轉義
# sys.path.insert(0, r"H:\pythonpro\Runflask")
from testt import application  # 檢查是否是application,這裡的必須是application
           

4、确定第3步正确後,還是有問題的話,那就是httpd裡面的配置有問題了,這時候,打開httpd.conf

檢視mod_wsgi的3行配置資訊是否添加進來了

2020年最新apache2.4 + flask + python3.8 + windows10的部署2020年最新apache2.4 + flask + python3.8 + windows的部署

檢查配置wsgi檔案資訊的文本是否正确

Listen 18001
<VirtualHost *:18001>
     WSGIScriptAlias / H:\pythonpro\Runflask\tesk.wsgi
     <Directory "H:\pythonpro\Runflask">
         WSGIApplicationGroup %{GLOBAL}
         Require all granted
     </Directory>
</VirtualHost>
           

特别注意: 路徑資訊不能填錯了,填錯了就找不到對應的檔案了,特别是特殊含義的\t,\n,\f

二、第一個是很坑很坑的問題,當存在有第三方科學計算庫導入(numpy,pandas,scipy庫)的時候,在浏覽器通路的時候,一直在轉圈圈,錯誤日志也沒有列印,也沒有報錯

在查閱了衆多資料後發現:添加WSGIApplicationGroup %{GLOBAL}就能把問題解決了
<Directory "H:\pythonpro\Runflask">
         WSGIApplicationGroup %{GLOBAL}
         Require all granted
     </Directory>
           

WSGIApplicationGroup

文法:WSGIApplicationGroup name

WSGIApplicationGroup指令,可用于指定WSGI應用程式或WSGI應用程式組屬于哪個組。一般來說,在同一個應用程式組中,所有的WSGI應用程式處理請求的過程,都将在的同一個Python子解釋器的上下文中執行。

在預設情況下,該“WSGIApplicationGroup”會被設定成“WSGIApplicationGroup %{RESOURCE}”,此時應用程式組的名稱将被設定為伺服器主機名和端口,如%伺服器變量,WSGI環境變量scriptname的值被附加到檔案分隔符中。

WSGIApplicationGroup %{GLOBAL},在該設定時,全局應用程式組中,任何WSGI應用程式都将在Python建立的第一個解釋器上下文中執行。當Python的外部C語言擴充子產品,使用簡化的線程API來操作Python GIL時,就必須強制WSGI應用程式在第一個解釋器中運作,原因是WSGI應用程式在Python建立的其餘子解釋器中都不能正确運作

到這裡,Flask項目的apache部署就全部完成了,如果還有其他部署不成功的情況,可以留言一起讨論交流