You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:48:45