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

Apache部署Django遇Fatal Python error: No module named 'encodings'求助

错误原因分析
  • 路径配置冲突:你的Apache配置中同时全局设置了WSGIPythonHome、WSGIPythonPath,又在WSGIDaemonProcess中单独指定了python-home,三个路径完全不统一,导致Python运行时找不到正确的模块路径。
  • 版本不匹配:报错日志中sys.path出现了Python3.8的路径,但你的虚拟环境基于Python3.9构建,版本不一致导致核心编码模块加载失败。
  • 权限不足:Apache默认运行用户(一般为www-data或apache)没有访问个人主目录下~/.local路径的权限,哪怕路径配置正确也无法读取虚拟环境的模块文件。
  • 多余路径配置:wsgi.py中手动添加的sys.path.append完全多余,会和Apache端的路径配置产生冲突。
解决方案

1. 统一虚拟环境路径(强烈推荐)

不要将项目依赖的虚拟环境放在个人主目录下,迁移到项目所在的/var/www路径下,避免权限问题:

  • 你可以直接在/var/www/myapp/myapp_root/路径下新建虚拟环境:
cd /var/www/myapp/myapp_root/
python3.9 -m venv venv
# 激活虚拟环境后安装所有依赖
source venv/bin/activate
pip install -r requirements.txt

2. 修正Apache WSGI配置

删除全局的WSGIPythonHome和WSGIPythonPath配置,仅在WSGIDaemonProcess中指定路径,修正后配置如下:

# 删掉原来的WSGIPythonHome、WSGIPythonPath两行
WSGIDaemonProcess myapp python-home=/var/www/myapp/myapp_root/venv python-path=/var/www/myapp/myapp_root
WSGIProcessGroup myapp
WSGIApplicationGroup %{GLOBAL}

WSGIScriptAlias / /var/www/myapp/myapp_root/myapp/wsgi.py

<Directory /var/www/myapp/myapp_root/myapp>
  <Files wsgi.py>
  Order deny,allow
  Require all granted
  </Files>
</Directory>

3. 修正wsgi.py配置

删除多余的手动路径添加,修正后内容如下:

"""
WSGI config for trackx project.

It exposes the WSGI callable as a module-level variable named ``application``.
"""

import os
import sys

# 只需要添加项目根目录到路径即可
sys.path.insert(0, '/var/www/myapp/myapp_root')

from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trackx.settings')

application = get_wsgi_application()

4. 修复目录权限

将整个项目目录的所有者修改为Apache运行用户,避免权限报错:

# Debian/Ubuntu 系统
sudo chown -R www-data:www-data /var/www/myapp
sudo chmod -R 755 /var/www/myapp

# CentOS/RHEL 系统
sudo chown -R apache:apache /var/www/myapp
sudo chmod -R 755 /var/www/myapp

5. 检查mod_wsgi版本匹配

确认mod_wsgi编译时使用的Python版本和你虚拟环境的Python3.9完全一致,否则会出现核心模块加载失败问题:

# 查看mod_wsgi链接的Python版本
ldd /usr/lib/apache2/modules/mod_wsgi.so

如果版本不匹配,可直接使用虚拟环境的pip重装mod_wsgi,然后将新生成的so文件路径配置到Apache中即可。

6. 重启服务测试

所有配置修改完成后重启Apache服务即可:

# Debian/Ubuntu
sudo systemctl restart apache2

# CentOS/RHEL
sudo systemctl restart httpd

内容的提问来源于stack exchange,提问作者Todd B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:39:03