Apache2部署Django应用时ImportError: No module named fragbuilder求助
解决Django部署到Apache后无法导入fragbuilder的问题
我之前也碰到过类似的模块导入坑,核心原因是Apache的WSGI进程使用的Python路径和你本地终端的PYTHONPATH完全独立,下面是一步步的排查和解决方法:
1. 确认fragbuilder的实际路径
先找到你克隆的fragbuilder仓库所在的绝对路径(比如在仓库目录下执行pwd就能看到),假设路径是/home/jai/fragbuilder。这个路径必须被添加到WSGI进程的Python搜索路径中。
2. 修改Apache虚拟主机配置
打开你的000-default.conf,找到WSGIDaemonProcess那一行,把fragbuilder的路径追加到python-path参数里:
WSGIDaemonProcess myproject python-path=/home/jai/myproject:/usr/local/lib/python2.7/dist-packages:/home/jai/fragbuilder
保存配置后重启Apache服务:
sudo service apache2 restart
划重点:WSGI进程不会读取你本地终端设置的PYTHONPATH环境变量,必须通过配置显式指定所有需要的模块路径。
3. 检查文件权限
Apache默认以www-data用户运行,要确保这个用户有权限读取fragbuilder目录下的所有文件:
# 赋予目录和文件基础可读权限 sudo chmod -R 755 /home/jai/fragbuilder # 可选:将目录所属用户组改为www-data,进一步确保权限 sudo chown -R :www-data /home/jai/fragbuilder
4. 若使用Virtualenv的额外配置
如果你是用virtualenv环境部署的,记得把虚拟环境的site-packages路径也加到python-path里,同时确保fragbuilder已被安装到虚拟环境(或把仓库路径加入):
WSGIDaemonProcess myproject python-path=/home/jai/myproject:/home/jai/your_venv/lib/python2.7/site-packages:/home/jai/fragbuilder
5. 验证WSGI的Python路径(排障用)
如果还是报错,可以在Django项目的wsgi.py里加一段代码,打印WSGI进程的Python路径,然后查看Apache错误日志确认:
import sys import logging logger = logging.getLogger(__name__) logger.info("WSGI Python Path: %s", sys.path)
之后查看日志:
tail -f /var/log/apache2/error.log
如果日志里没有fragbuilder的路径,说明配置还没生效,需要重新检查步骤2的配置。
内容的提问来源于stack exchange,提问作者jax
相关产品推荐
相关产品推荐

