部署Django应用至Apache时遭遇init_fs_encoding错误求助
Django部署至Apache2时
encodings模块缺失错误的解决方案 错误信息
PYTHONHOME = '/home/rickmanns/bar/bar/djenv' PYTHONPATH = (not set) program name = 'python3' isolated = 0 environment = 1 user site = 1 safe_path = 0 import site = 1 is in build tree = 0 stdlib dir = '/home/rickmanns/bar/bar/djenv/lib/python3.11' sys._base_executable = '/usr/bin/python3' sys.base_prefix = '/home/rickmanns/bar/bar/djenv' sys.base_exec_prefix = '/home/rickmanns/bar/bar/djenv' sys.platlibdir = 'lib' sys.executable = '/usr/bin/python3' sys.prefix = '/home/rickmanns/bar/bar/djenv' sys.exec_prefix = '/home/rickmanns/bar/bar/djenv' sys.path = [ '/home/rickmanns/bar/bar/djenv/lib/python311.zip', '/home/rickmanns/bar/bar/djenv/lib/python3.11', '/home/rickmanns/bar/bar/djenv/lib/python3.11/lib-dynload', ] Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding Python runtime state: core initialized ModuleNotFoundError: No module named 'encodings'
当前Apache配置
Alias /static /home/rickmanns/bar/static <Directory /home/user/myproject/static> Require all granted </Directory> <Directory /home/rickmanns/bar/bar> <Files wsgi.py> Require all granted </Files> </Directory> WSGIDaemonProcess bar python-path=/home/rickmanns/bar python-home=/home/rickmanns/bar/djenv WSGIProcessGroup bar WSGIScriptAlias / /home/rickmanns/bar/bar/wsgi.py
解决方案
修正虚拟环境路径不匹配问题
错误信息显示PYTHONHOME指向/home/rickmanns/bar/bar/djenv,但Apache配置中python-home设置的是/home/rickmanns/bar/djenv,两者路径不一致。先通过ls /home/rickmanns/bar/和ls /home/rickmanns/bar/bar/确认虚拟环境djenv的实际位置,再调整WSGIDaemonProcess的python-home参数与实际路径一致。修复静态文件目录配置冲突
配置中Alias指定的静态目录是/home/rickmanns/bar/static,但对应的<Directory>块写的是/home/user/myproject/static,完全不匹配。修改为:Alias /static /home/rickmanns/bar/static <Directory /home/rickmanns/bar/static> Require all granted </Directory>确保虚拟环境权限正确
Apache运行用户(通常为www-data)需要拥有虚拟环境目录的读取权限,执行以下命令:sudo chown -R www-data:www-data /home/rickmanns/bar/djenv sudo chmod -R 755 /home/rickmanns/bar/djenv验证Python路径配置
WSGIDaemonProcess中的python-path指向/home/rickmanns/bar(即包含manage.py的项目根目录)是正确的,无需修改。
调整配置后重启Apache服务:
sudo systemctl restart apache2
内容的提问来源于stack exchange,提问作者Jonas Ricke
相关产品推荐
相关产品推荐

