欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-01-26 20:38:16
2020年最新apache2.4 + flask + python3.8 + windows的部署在参考了许多apache的部署文章之后,写下这篇博客记录一下部署的完整过程和所遇到的问题(bug) 首先是所需要的环境python3.8版本apache2.4版本 + 对应的flask项目Windows 10 python3.8版本的下载和安装我下载的是python的3.8.3版本的解释器,按照自己操作系统是几位的来下载几位的python解释器,一般电脑都是32位和64...

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的部署

python3.8.3的下载地址:https://www.python.org/downloads/

进入地址找到32位版本的python3.8.3
2020年最新apache2.4 + flask + python3.8 + windows10的部署
下载之后自定义安装到c盘的python38上面:c:\python38
2020年最新apache2.4 + flask + python3.8 + windows10的部署
安装完成之后,查看安装的python信息,注意:如果电脑上面又多个不同版本的解释器,直接进入c:\python38目录,双击打开python.exe文件就可以打开新安装的python了
2020年最新apache2.4 + flask + python3.8 + windows10的部署
红框里表示安装的是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的部署

apache下载地址:http://httpd.apache.org/docs/current/platform/windows.html#down

2020年最新apache2.4 + flask + python3.8 + windows10的部署
ApacheHaus还没有最新的vc16版本,所以我去Apache Lounge中找到了对应的vc16(32位win)版本下载,有可能Apache Lounge这个网址打不开,无法下载到最新版本,下载不到文末可以给我留盐

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

第二大部分:安装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 + windows10的部署

> **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 + windows10的部署

> 3、apache服务启动之后,在浏览器输入***localhost:18000***,显示It works!表示访问成功

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

  • 下载和安装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的部署
下载完成之后,把文件复制到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的部署
安装完成后,继续输入以下命令,把生成的3行代码复制到apache的httpd.conf配置文件中,进行apache配合mod_wsgi模块使用

mod_wsgi-express module-config

2020年最新apache2.4 + flask + python3.8 + windows10的部署
复制3行代码到apache的httpd.conf配置文件中:
2020年最新apache2.4 + flask + python3.8 + windows10的部署

第三大部分:创建Flask小项目

下面分3个步骤讲解

第一步:写个简单Flask的例子:

from flask import Flask


application = Flask(__name__)

@application.route('/demo')
def test():
    return '无穷鸡蛋'

application.run(debug=True)

第二步:编写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的部署

查看项目是否部署成功

访问地址:http://localhost:18001/demo

如下图,表示访问成功,部署成功了,访问地址的时候,记得要加 /demo ,项目里面的路由是/demo
2020年最新apache2.4 + flask + python3.8 + windows10的部署

部署遇到的问题

一般都是自己粗心造成的错误,下面列举一些遇到的错误:
以下问题是我总结了自己说的,当时部署的时候问题解决了,现在复现不了,没有截图,所以总结一下
一、地址访问正确了,但是会报错(具体错误具体分析)。在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的部署
检查配置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部署就全部完成了,如果还有其他部署不成功的情况,可以留言一起讨论交流

本文地址:https://blog.csdn.net/gogo_hjj/article/details/107170419