Windows环境Apache2.4部署Django报init_fs_encoding错误如何解决?
问题解决办法
该错误核心是mod_wsgi加载Python运行环境时无法识别核心标准库路径,找不到encodings核心模块,可按以下步骤修复:
检查mod_wsgi版本匹配
Windows环境下mod_wsgi必须和你的Python版本、Apache位数、VC编译版本完全一致,例如使用Python3.10 64位、Apache2.4 64位时,必须安装对应Python3.10、64位编译的mod_wsgi版本,版本不匹配是该类报错的高发原因。配置Apache全局Python路径
在Apache的httpd.conf配置文件中,找到加载mod_wsgi.so的代码行,在下方添加如下配置,指向你的虚拟环境根目录:
WSGIPythonHome "C:/Users/myuser/Desktop/app/appEnv"
同时给Windows系统添加全局环境变量:
- 变量名
PYTHONHOME,值为C:\Users\myuser\Desktop\app\appEnv - 变量名
PYTHONPATH,值为C:\Users\myuser\Desktop\app\appEnv\Lib;C:\Users\myuser\Desktop\app\appEnv\Lib\site-packages
添加完成后重启Apache服务,若使用Windows服务运行Apache需重启系统确保环境变量生效。
- 修正wsgi_windows.py配置
你当前的路径插入逻辑优先级不足,且存在重复配置,修改文件内容如下:
import os import sys import site # 优先加载虚拟环境的site-packages site.addsitedir('C:/Users/myuser/Desktop/app/appEnv/Lib/site-packages') # 将项目路径插到sys.path最前面,避免优先级低于系统路径 sys.path.insert(0, 'C:/Users/myuser/Desktop/app') sys.path.insert(1, 'C:/Users/myuser/Desktop/app/appEnv/Lib') sys.path.insert(2, 'C:/Users/myuser/Desktop/app/appEnv/Lib/site-packages') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
- 修正虚拟主机配置的路径匹配问题
你当前的虚拟主机配置中,wsgi文件存放路径和权限放行路径不匹配,修改对应块如下:
<VirtualHost *:80> ServerName localhost WSGIPassAuthorization On ErrorLog "C:/Users/myuser/Desktop/app.error.log" CustomLog "C:/Users/myuser/Desktop/app.access.log" combined WSGIScriptAlias / "C:/Users/myuser/Desktop/app/wsgi_windows.py" # 路径修改为wsgi文件所在的目录 <Directory "C:/Users/myuser/Desktop/app"> <Files wsgi_windows.py> Require all granted </Files> </Directory> Alias /static "C:/Users/myuser/Desktop/app/static" <Directory "C:/Users/myuser/Desktop/app/static"> Require all granted </Directory> </VirtualHost>
- 权限检查
给Apache运行用户(默认服务运行时为SYSTEM用户)开放项目目录、虚拟环境目录的读取、执行权限,避免文件访问被拦截。
配置全部修改完成后,可先在cmd中进入Apache的bin目录,执行httpd.exe直接启动程序,查看控制台输出是否有报错,无报错再访问站点验证功能。
内容的提问来源于stack exchange,提问作者Sean Brittian
相关产品推荐
相关产品推荐

