无法通过mod_wsgi运行Python:部署Apache httpd应用遇站点模块导入错误
我之前也碰到过几乎一模一样的情况,尤其是在系统多Python版本共存、用公司定制Python包的时候,这个报错大多和路径配置错误或者mod_wsgi与Python版本不兼容有关,咱们一步步来排查解决:
1. 先确认定制Python2.7的正确根路径
site模块是Python标准库的核心部分,找不到它通常意味着mod_wsgi没找对Python的安装根目录。先打开终端,用你的定制Python执行命令,定位site模块的位置:
/opt/custom-python2.7/bin/python2.7 -c "import site; print(site.__file__)"
输出大概会是/opt/custom-python2.7/lib/python2.7/site.py,那你的Python根目录就是/opt/custom-python2.7——也就是包含bin、lib子目录的那个文件夹,这就是WSGIPythonHome应该指向的路径。
2. 修正WSGIPythonHome和WSGIPythonPath配置
打开你的Apache配置文件(比如httpd.conf或者虚拟主机配置),确保这两个变量的路径完全正确:
# 指向定制Python的根目录,不要指向bin或lib子目录 WSGIPythonHome /opt/custom-python2.7 # 包含你的应用目录 + 定制Python的site-packages路径,用冒号分隔 WSGIPythonPath /path/to/your/python/app:/opt/custom-python2.7/lib/python2.7/site-packages
注意:如果把WSGIPythonHome设成bin或者lib目录,mod_wsgi会无法正确加载Python的核心标准库,这是最常见的踩坑点。
3. 检查Apache进程的访问权限
Apache运行的用户(通常是apache、www-data或者公司定制的服务用户)必须能读取定制Python目录下的所有文件和子目录。如果权限不足,即使路径正确也会触发导入错误:
- 可以先临时测试权限:
chmod -R o+rx /opt/custom-python2.7(生产环境建议更精细地设置权限,比如把Apache用户加入Python目录的所属组) - 修改权限后重启Apache,再查看错误日志。
4. 确认mod_wsgi与定制Python2.7兼容
这是很容易被忽略的关键点:mod_wsgi是和编译它的Python版本绑定的。如果你的mod_wsgi是用系统自带的Python2.6编译的,那就算设置了WSGIPythonHome,也会出现底层兼容性问题。解决方法是重新编译mod_wsgi:
# 下载适配Python2.7的mod_wsgi源码版本 ./configure --with-python=/opt/custom-python2.7/bin/python2.7 make && make install
编译完成后,替换Apache中旧的mod_wsgi模块,重启服务即可。
5. 调试路径配置(可选)
如果以上步骤都试过还是报错,可以在你的WSGI入口脚本里添加调试代码,打印当前的Python路径,确认mod_wsgi实际加载的目录是否正确:
import sys # 打印当前sys.path,方便排查路径问题 print("Current sys.path:", sys.path) try: import site print("Site module path:", site.__file__) print("Site packages directories:", site.getsitepackages()) except ImportError as e: print("ImportError details:", str(e))
重启Apache后,查看错误日志里的输出,就能清楚看到问题出在哪个路径环节,再针对性调整即可。
内容的提问来源于stack exchange,提问作者jumpUpToTheCeiling

