Windows10部署Django生产环境:pip安装mod_wsgi缺失apr_perms_set.h报错
解决ApacheHaus Apache 2.4.37 x64 + mod_wsgi编译失败(找不到apr_perms_set.h)的方案
我之前在Windows 10上部署Django时,也踩过ApacheHaus版本Apache搭配mod_wsgi编译的坑,针对你遇到的找不到apr_perms_set.h的问题,给你几个亲测有效的修复方案,从避免编译到修复编译路径都有覆盖:
方案1:直接用预编译的mod_wsgi二进制包(最省心)
自己编译容易踩依赖路径的坑,ApacheHaus的Apache用的是自带的APR库,和系统默认路径不匹配,直接用预编译包能绕开编译环节:
- 先确认你的Python版本:必须是VC14编译的x64版本(比如Python 3.5~3.9,3.10及以上是VC16编译的,和你的Apache不兼容)
- 找匹配的mod_wsgi二进制包:选择对应Apache 2.4.x、Python版本、x64、VC14的预编译
.so文件 - 把下载到的
mod_wsgi.so放到你的Apache安装目录下的modules文件夹里 - 在Apache的
httpd.conf中添加加载模块的配置:LoadModule wsgi_module modules/mod_wsgi.so - 后续再配置
WSGIScriptAlias等指向你的Django项目的wsgi.py即可
方案2:修复编译时的APR路径参数
如果你坚持要编译安装,需要手动指定ApacheHaus自带的APR头文件路径,因为pip默认找不到这些位置:
- 找到你的ApacheHaus安装根目录(比如
C:\Apache24),APR的头文件在include\apr-1和include\apr-util-1两个文件夹里 - 打开Visual Studio 2015/2017/2019的Developer Command Prompt(必须用这个,确保VC14编译器环境变量正确配置)
- 执行带路径参数的pip安装命令:
注意把路径换成你实际的Apache安装路径pip install mod_wsgi --global-option=build_ext --global-option="-IC:\Apache24\include" --global-option="-IC:\Apache24\include\apr-1" --global-option="-IC:\Apache24\include\apr-util-1"
方案3:严格匹配版本避免兼容性问题
版本不兼容是这类编译问题的核心原因,一定要确保三者版本完全匹配:
- Apache:你用的2.4.37 x64 VC14是对的,不要换成其他渠道的Apache(比如XAMPP的,APR路径结构不一样)
- Python:必须是VC14编译的x64版本(Python官网下载时注意看“Windows x86-64 executable installer”,且版本在3.5~3.9之间)
- mod_wsgi:指定兼容的版本,推荐用
4.9.4版本,这个版本对Apache 2.4.37和Python 3.x的兼容性最佳,安装命令:pip install mod_wsgi==4.9.4 --global-option=build_ext --global-option="-IC:\Apache24\include" --global-option="-IC:\Apache24\include\apr-1" --global-option="-IC:\Apache24\include\apr-util-1"
额外注意事项
- 绝对不能混装32位和64位软件:Apache、Python、mod_wsgi必须全是x64版本
- 编译前关闭杀毒软件,部分杀毒软件会拦截编译器读取头文件的操作
- 如果用预编译包,一定要验证包的兼容性:加载模块后重启Apache,看是否有报错,没有的话再配置Django
内容的提问来源于stack exchange,提问作者Serge Rogatch
相关产品推荐
相关产品推荐

