Django+Apache+Virtualenv在Windows上的部署

环境:

Python3.6.8

Django2.2

Apache24

Windows10

流程:

Django项目路径:D:\pywww\djbbs

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文件权限 <Directory D:\pywww\djbbs\djbbs> <Files wsgi.py> Require all granted </Files> </Directory>
    #static目录权限 Alias /static D:\pywww\djbbs\static <Directory D:\pywww\djbbs\static> Require all granted </Directory>
    #media目录权限 Alias /media D:\pywww\djbbs\media <Directory D:\pywww\djbbs\media> Require all granted </Directory>

    我们需要注意的就是上述的这两行配置项:

    WSGIPythonHome "d:/python36"
    WSGIPythonPath "d:/pyenvs/py36/Lib/site-packages;d:/pywww/djbbs"

    WSGIPythonHome的路径要指向全局,WSGIPythonPath要添加虚拟环境的site-packages。

    如果没这样配置Home启动apache就会报错:


    Path没加访问就会500

    我就卡在这儿了,完全没搞清楚问题出在哪,直到看了这篇文章,“因此这些新版本无法以某种方式成功找到该encodings模块”,说实话,我看的很懵。。。
    按照上述配置后,apache启动时,项目就能找到虚拟环境的包和全局python的包,项目就能跑起来了。为什么会这样呢?,但终归问题解决了。

posted @ 2021-02-04 16:44  etdreamer  阅读(156)  评论(0)    收藏  举报