Django部署Apache/mod_wsgi后安装xhtml2pdf遇PIL _imaging导入错误
问题分析与解决办法
这个问题确实和mod_wsgi的运行环境有关,核心原因是mod_wsgi加载的Python环境与你命令行使用的虚拟环境不一致,导致PIL库无法被正确导入。以下是具体排查和解决方向:
1. 确认mod_wsgi是否正确加载虚拟环境
检查Apache配置文件中的WSGIDaemonProcess和WSGIProcessGroup配置,确保指定了你的项目虚拟环境路径:
WSGIDaemonProcess myproject python-home=/home/ubuntu/myproject/env WSGIProcessGroup myproject
修改配置后,必须重载Apache服务(sudo systemctl reload apache2),否则新配置不会生效。
2. 重新安装Pillow库
安装xhtml2pdf时可能自动更新或重新安装了Pillow,但mod_wsgi环境中的Pillow可能存在编译损坏或依赖缺失:
- 进入虚拟环境,卸载现有Pillow:
source /home/ubuntu/myproject/env/bin/activate pip uninstall -y Pillow - 先安装系统层面的编译依赖(Ubuntu系统):
sudo apt-get install libjpeg-dev zlib1g-dev - 重新安装Pillow:
pip install Pillow
安装过程中要确保没有编译错误,否则说明系统依赖仍有缺失。
3. 检查mod_wsgi与Python版本的兼容性
mod_wsgi需要和虚拟环境的Python版本完全匹配(均为3.10):
- 运行
mod_wsgi-express module-config,查看输出中的Python路径是否指向你的虚拟环境3.10版本。 - 如果版本不匹配,需要重新编译mod_wsgi:
source /home/ubuntu/myproject/env/bin/activate pip install mod_wsgi
然后将新生成的mod_wsgi模块路径更新到Apache配置中。
4. 修复文件权限问题
Apache运行用户(通常是www-data)可能没有权限读取虚拟环境中的PIL库文件:
sudo chown -R ubuntu:www-data /home/ubuntu/myproject/env sudo chmod -R 755 /home/ubuntu/myproject/env
确保虚拟环境目录及所有子文件、子目录都有可读权限。
内容的提问来源于stack exchange,提问作者Pathia Nanto
相关产品推荐
相关产品推荐

