windows conda + python apache 安装 mod_wsgi

📅 2026/7/28 10:56:27
windows conda + python apache 安装 mod_wsgi
注意mod_wsgi本质上就是把一个 Python 运行时和它的依赖集成到 Apache 服务器里。在 Windows 平台上一个 Apache 服务器只能集成一个 Python 运行时不支持如Linux平台一样加载多个 Python 运行时所以一个 Apache 只能支持一个 Python 项目如果需要支持第二个 Python 环境完全不同的项目只能通过反向代理的方式支持。背景本地有个项目服务器是Apache之前后端实现一部分是PHP一部分是通过PHP exec调用的Python还有一些本地定时执行调用Python的bat脚本。最近项目复杂了起来把后端重构了下统一改成了Python实现并且单独给Python代码创建了一个conda的虚拟环境在使用的过程中发现PHP exec激活conda环境执行Python脚本的速度很慢有1.5s所以想直接把Python集成到Apache中。Apache集成Python有两种方式fastcgi和Python专用的mod_wsgi现在最流行和推荐的是mod_wsgi模式所以研究了下发现网上关于windows conda python mod_wsgi的教程很乱也很少还都是很古早之前的文章里面引用的网址都已经没有了所以在成功之后写了这篇文章给大家参考下。准备推荐大家直接看mod_wsgi作者的github写的很详细。注作者GrahamDumpleton明确表示他不提供预编译的mod_wsgi.so文件因为每个版本的Apache和Python必须是一一对应的他推荐在安装的时候在本地自行编译so。Apache必须是完整安装的Apache要附带开发包因为之后要手动打出so模块。我用的是XAMPP里的Apache包含了完整的开发包。完整的Apache可以从这里下载。PythonPython理论上也需要完整的头文件不过windows上的Python都自带头文件所以windows只用按自己的情况安装Python就行了。其他操作系统可能只有Python的运行时缺少头文件大家可以按GrahamDumpleton的github readme的教程补齐头文件。安装整个安装过程比较简单设置环境变量默认安装时会自动到C:/Apache24目录下寻找Apache但是如果你的Apache不在这个位置那就需要设置一下环境变量MOD_WSGI_APACHE_ROOTDIR指明系统上的Apache的位置。安装运行pip install mod_wsgi就这一个命令配置Apachemod_wsgi安装完成之后运行mod_wsgi-express install-module(今天2026-07-26 Python 3.13重新安装时没了install-module命令改用mod_wsgi-express module-config命令脚本会输出LoadFile C:/Users/XXX/anaconda3/envs/XXX/python312.dll LoadModule wsgi_module C:/Users/XXX/anaconda3/envs/XXX/Lib/site-packages/mod_wsgi/server/mod_wsgi.cp312-win_amd64.pyd WSGIPythonHome C:/Users/XXX/anaconda3/envs/XXX直接把这三行copy到Apache的httpd.conf文件就行。conda的虚拟环境也是一样的脚本能识别的出来我这个就是虚拟环境。上面命令给Apache指明了在哪里找到python和mod_wsgi模块。然后再配置一个命令这个命令是指示Apache把 /XXX/XXX 开头的请求发送给mod_wsgi处理程序。WSGIScriptAlias /XXX/XXX C:/Users/XXX/Xampp/htdocs/XXX/python/app.wsgi网上其他教程都会创建一个虚拟主机我这里不需要虚拟主机就直接copy到文件最后了。WSGI处理程序mod_wsgi本身是一种通信格式也是需要三方库解析的我找了一个比较简单的flask web框架来处理。需要新建两个文件第一个文件就是标准的flask入口具体参考flask教程app Flask(__name__) app.route(/) def main(): return if __name__ __main__: app.run()第二个是对接Apache的主要作用有两个一是from app import app as application把你上一个文件里的app导入命名为application它是mod_wsgi预定义的名称会默认找它处理请求。第二个是导入Python的pathimport你的Python代码用的一般是你项目的根目录。import sys path C:\\Users\\XXX\\Xampp\\htdocs\\XXX if path not in sys.path: sys.path.append(path) from app import app as application到这里mod_wsgi就算是配完了。杂谈安装mod_wsgi对Apache有要求必须要包含开发包安装之前我不知道我的XAMPP安装的Apache是完整的只是想试一下没想到一次就成功了。如果Apache不是完整的又不想卸载重装的话我这里有一个没有经过测试的办法在https://www.apachelounge.com/下载一个和本地安装Apache同版本同VC编译版本的Apache安装的时候把环境变量MOD_WSGI_APACHE_ROOTDIR指向这个新的Apachemod_wsgi安装成功之后把配置命令写进旧的Apache再把新的删掉就行理论上这种操作应该也可以。