升级Python至3.12后Apache+WSGI部署Django提示模块找不到怎么办
解决Python 3.12下Apache+WSGI无法找到Django模块的问题
问题核心是系统预装的libapache2-mod-wsgi-py3还未适配Python 3.12,导致Apache加载的WSGI模块仍绑定旧版本Python,无法识别新虚拟环境中的Django。以下是两种可行的解决办法:
方法一:从源码编译适配Python3.12的mod_wsgi
这是最彻底的解决方案,直接让mod_wsgi绑定你的Python3.12环境:
- 卸载系统自带的旧版mod_wsgi:
sudo apt remove libapache2-mod-wsgi-py3 - 安装编译所需依赖包:
sudo apt install apache2-dev python3.12-dev - 切换到Python3.12虚拟环境,用pip安装mod_wsgi:
/.../back/venv/bin/pip install mod_wsgi - 生成mod_wsgi的Apache配置片段:
执行后会输出类似内容:/.../back/venv/bin/mod_wsgi-express module-configLoadModule wsgi_module "/.../back/venv/lib/python3.12/site-packages/mod_wsgi/server/mod_wsgi-py312.so" WSGIPythonHome "/.../back/venv" - 将上述内容替换到Apache的WSGI模块配置文件(通常为
/etc/apache2/mods-available/wsgi.load) - 重启Apache服务:
sudo systemctl restart apache2
方法二:检查并修正虚拟环境配置
若暂时不想编译,先确认Apache配置是否正确指向Python3.12虚拟环境:
- 确保
WSGIDaemonProcess中的python-home是Python3.12虚拟环境的绝对路径,比如/.../back/venv python-path需设置为Django项目根目录(即包含manage.py的文件夹),例如若manage.py在/.../back/project,则python-path设为/.../back/project- 手动验证虚拟环境中是否安装了Django:
若无输出,说明未在新虚拟环境安装Django,执行:/.../back/venv/bin/pip list | grep Django/.../back/venv/bin/pip install django
额外注意事项
- 重启Apache后,查看错误日志
/.../back/logs/back-error.log,若仍有模块找不到的错误,检查虚拟环境路径是否拼写错误,或Apache进程是否有权限访问虚拟环境目录 - 确保系统自带的旧版mod_wsgi已完全卸载,避免多个版本冲突
内容的提问来源于stack exchange,提问作者PR0J3CT
相关产品推荐
相关产品推荐

