Django部署至Apache2报错:ModuleNotFoundError: No module named 'encodings'
解决Django+Apache WSGI部署时的"ModuleNotFoundError: No module named 'encodings'"问题
这个错误我之前部署Django项目时也踩过坑,核心原因几乎都是Apache的WSGI模块没有正确关联你开发时使用的Python环境(尤其是虚拟环境),导致Python解释器找不到基础的编码模块。下面是一步步的排查和解决步骤:
1. 确保使用Python3版本的WSGI模块
Ubuntu 17.10默认可能安装的是Python2版本的mod_wsgi,这会和你的Python3开发环境不兼容:
- 先检查当前WSGI模块版本:
dpkg -l | grep libapache2-mod-wsgi - 如果输出里是
libapache2-mod-wsgi(不带py3),立刻安装Python3版本的模块:sudo apt-get update && sudo apt-get install libapache2-mod-wsgi-py3 - 禁用旧的Python2 WSGI模块,启用新的:
sudo a2dismod wsgi sudo a2enmod wsgi-py3 sudo systemctl restart apache2
2. 正确配置虚拟环境(如果使用了的话)
如果你开发时用了虚拟环境(强烈推荐),必须在Apache配置里明确指定虚拟环境的路径,否则Apache会用系统默认的Python:
修改你的VirtualHost配置,添加以下内容(替换成你自己的路径):
<VirtualHost *:80> ServerAdmin webmaster@localhost ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # 指定虚拟环境和项目路径 WSGIDaemonProcess mygpsproject python-home=/home/usr/mygpsproject/venv python-path=/home/usr/mygpsproject WSGIProcessGroup mygpsproject # 指向项目的wsgi.py文件 WSGIScriptAlias / /home/usr/mygpsproject/gps_restapi/wsgi.py # 配置目录权限 <Directory /home/usr/mygpsproject/gps_restapi> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>
python-home:你的虚拟环境根目录python-path:你的Django项目根目录(包含manage.py的那个)
3. 修复文件权限问题
Apache运行用户是www-data,必须确保它能访问你的项目目录和虚拟环境:
# 给Apache用户赋予项目目录的所有权 sudo chown -R www-data:www-data /home/usr/mygpsproject # 或者至少保证目录有可读权限 sudo chmod -R 755 /home/usr/mygpsproject
4. 调试验证Python路径
如果还是报错,可以在wsgi.py开头添加调试代码,查看Apache使用的Python路径:
import sys # 打印Python路径到Apache错误日志 print('Python Path:', sys.path) import os os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gps_restapi.settings') from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
重启Apache后,查看错误日志:
sudo tail -f /var/log/apache2/error.log
如果输出里没有你的虚拟环境site-packages路径,说明WSGI还是没用到虚拟环境,回到步骤2检查配置。
最后提醒:不要直接修改默认的000-default.conf,建议新建一个专属配置文件(比如mygpsproject.conf),然后用sudo a2ensite mygpsproject.conf启用,再禁用默认站点:sudo a2dissite 000-default.conf,这样更干净。
内容的提问来源于stack exchange,提问作者NINJA
相关产品推荐
相关产品推荐

