最近在Windows系统尝试使用Apache部署django项目,但中间遇到一个问题,就是Apache错误日志里一直报错:
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运行django项目。喜极而泣,特意写下来记录一下,也能给有需要的提供一个参考。
Python3.6.8
Django2.2
Apache24
Windows10
Apache路径:D:\Apache24
Pyhton路径:D:\python36
第一次练习性的部署,一路摸爬滚打,参考了一堆文档,踩了不少坑,最终成功。现将过程记录如下:
mod_wsgi-express module-config
系统会输出如下:
LoadModule wsgi_module "d:/pyenvs/py36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "d:/pyenvs/py36"
这里有两种情况,如果你没用virtualenv虚拟环境,还会多一个LoadFile配置项如下:
loadFile "d:/python36/python36.dll"
当然,如果是这种情况,你应该可以很顺利的部署完成。
先记住上述输出的配置项,马上要用到。
LoadModule wsgi_module "d:/pyenvs/py36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "d:/python36"
WSGIPythonPath "d:/pyenvs/py36/Lib/site-packages;d:/pywww/djbbs"
#wsgi文件地址
WSGIScriptAlias / D:\pywww\djbbs\djbbs\wsgi.py
#wsgi文件权限
Require all granted
#static目录权限
Alias /static D:\pywww\djbbs\static
Require all granted
#media目录权限
Alias /media D:\pywww\djbbs\media
Require all granted
我们需要注意的就是上述的这两行配置项:
WSGIPythonHome "d:/python36"
WSGIPythonPath "d:/pyenvs/py36/Lib/site-packages;d:/pywww/djbbs"
WSGIPythonHome的路径要指向全局,WSGIPythonPath要添加虚拟环境的site-packages。
如果没这样配置Home启动apache就会报错:
我就卡在这儿好几天。。。
再次说明一下,这篇文章是博客园的,只是最近进不去,我就重新写下来。