Ubuntu配置Apache2与Python(Django)时出现site.addsitedir调用失败错误
解决Apache2 + mod_wsgi-py3的
site.addsitedir() failed for '(null)'错误 这个错误我之前配置Django+Apache的时候也踩过坑,大概率是虚拟环境路径配置错误或者Python版本与mod_wsgi不匹配导致的,咱们一步步排查解决:
1. 确认Python版本与mod_wsgi的兼容性
首先得确保你装的libapache2-mod-wsgi-py3和虚拟环境的Python版本完全对应:
- 查看mod_wsgi关联的Python版本:
输出里会显示加载的Python库路径,比如mod_wsgi-express module-config/usr/lib/python3.x/...,要和你的虚拟环境Python版本(你这里是3.5)对齐。如果版本不匹配,可能需要重新安装对应版本的mod_wsgi包。
2. 修正WSGIDaemonProcess配置
你当前的配置手动指定了site-packages路径,其实更稳妥的是用python-home直接指向虚拟环境根目录,让mod_wsgi自动处理依赖路径,避免手动写路径出错:
修改000-default.conf里的WSGI配置段:
<VirtualHost *:80> ServerAdmin webmaster@localhost # 用python-home指定虚拟环境根目录,python-path指向Django项目根目录(含manage.py的目录) WSGIDaemonProcess bot python-home=/home/ubuntu/Django/myvenv python-path=/home/ubuntu/Django/bot WSGIProcessGroup bot WSGIScriptAlias / /home/ubuntu/Django/bot/bot/wsgi.py <Directory /home/ubuntu/Django/bot/bot> <Files wsgi.py> Require all granted </Files> </Directory> # 静态文件配置(如果你的项目需要) Alias /static/ /home/ubuntu/Django/bot/static/ <Directory /home/ubuntu/Django/bot/static> Require all granted </Directory> </VirtualHost>
注意:一定要确认/home/ubuntu/Django/myvenv确实是你的虚拟环境根目录,python-path指向的是包含manage.py的Django项目目录。
3. 检查目录权限
Apache的运行用户是www-data,必须确保它能访问你的项目和虚拟环境目录:
# 给项目目录添加读权限(最基础的权限配置) sudo chmod -R 755 /home/ubuntu/Django/ # 如果安全允许,也可以直接把目录所有者改为www-data sudo chown -R www-data:www-data /home/ubuntu/Django/
4. 重启Apache并验证
修改配置后重启服务:
sudo systemctl restart apache2
然后查看错误日志确认问题是否解决:
tail -f /var/log/apache2/error.log
如果没有再出现site.addsitedir()的错误,就说明配置修复成功了。
额外注意点
- 确保你没有同时启用Python2版本的mod_wsgi,执行
sudo a2dismod wsgi(如果之前装过py2版本)再重新启用py3版本:sudo a2enmod wsgi - 虚拟环境创建时要用对应版本的Python,比如
python3.5 -m venv myvenv,避免版本不匹配导致的路径问题
内容的提问来源于stack exchange,提问作者daemon
相关产品推荐
相关产品推荐

