Django+Apache+Virtualenv在Windows上的部署

最近在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

流程:

Django项目路径:D:\pywww\djbbs
Django+Apache+Virtualenv在Windows上的部署_第1张图片

Apache路径:D:\Apache24

Pyhton路径:D:\python36

第一次练习性的部署,一路摸爬滚打,参考了一堆文档,踩了不少坑,最终成功。现将过程记录如下:

  • 我想用python虚拟环境来部署,于是用virtualenv在D盘建了个虚拟环境,路径为:D:\pyenvs\py36
  • 下载对应apache和python版本的mod_wsgi 4.7.1的whl包,切换到虚拟环境,pip安装,然后执行命令如下:
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"

当然,如果是这种情况,你应该可以很顺利的部署完成。
先记住上述输出的配置项,马上要用到。

  • 打开apache的httpd.conf配置文件,在底部添加如下:
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就会报错:
Django+Apache+Virtualenv在Windows上的部署_第2张图片
我就卡在这儿好几天。。。
再次说明一下,这篇文章是博客园的,只是最近进不去,我就重新写下来。

你可能感兴趣的:(django,python)