美文网首页Python爱好者
在Windows环境中使用Python3.5部署Apache2.

在Windows环境中使用Python3.5部署Apache2.

作者: 远飞的大雁2010 | 来源:发表于2016-09-07 12:05 被阅读1672次

    在Linux 或OS X环境下部署网站很容易,可以选择的组合很多,如nginx+uwsgi或apache+mod_wsgi都可以。但到了Windows环境下就没有那么多选项了。使用Python开发的网站的话,只有Apache+mod_wsgi可以使用了。原来在Python3.4 下一直用的好好的,最近把Python升级到3.5.2之后,发现Apache服务器没办法启动了,经过一番折腾,终于搞定了。

    原来一直以为Apache不支持Python3.5,反复的下载、重装Python、mod_wsgi等程序,折腾了好久。今天在网上看到一篇文章,上面提到要看日志,才突然明白自己原来一直在瞎折腾。

    于是打开Apache的日志,看到下面这一段:

    
    [Wed Sep 07 09:18:06.606497 2016] [wsgi:warn] [pid 5432:tid 508] mod_wsgi: Compiled for Python/3.5.1.
    
    [Wed Sep 07 09:18:06.607499 2016] [wsgi:warn] [pid 5432:tid 508] mod_wsgi: Runtime using Python/3.5.2.
    
    [Wed Sep 07 09:18:06.608499 2016] [mpm_winnt:notice] [pid 5432:tid 508] AH00455: Apache/2.4.16 (Win64) mod_wsgi/4.4.23 Python/3.5.2 configured -- resuming normal operations
    
    [Wed Sep 07 09:18:06.608499 2016] [mpm_winnt:notice] [pid 5432:tid 508] AH00456: Apache Lounge VC14 Server built: Jul 22 2015 13:24:19
    
    [Wed Sep 07 09:18:06.608499 2016] [core:notice] [pid 5432:tid 508] AH00094: Command line: 'c:\\apache24\\bin\\httpd.exe -d C:/Apache24'
    
    [Wed Sep 07 09:18:06.610500 2016] [mpm_winnt:notice] [pid 5432:tid 508] AH00418: Parent: Created child process 1276
    
    [Wed Sep 07 09:18:06.905541 2016] [wsgi:warn] [pid 1276:tid 412] mod_wsgi: Compiled for Python/3.5.1.
    
    [Wed Sep 07 09:18:06.905541 2016] [wsgi:warn] [pid 1276:tid 412] mod_wsgi: Runtime using Python/3.5.2.
    
    Fatal Python error: Py_Initialize: unable to load the file system codec
    
    ImportError: No module named 'encodings'
    
    

    看了日志后,以为是mod_wsgi和Python的版本不匹配,于是卸载了Python3.5.2,并重新安装上了Python3.5.1,结果发现还是无法启动Apache服务。

    认真阅读了日志才发现自己理解错了。python和mod_wsgi的版本不匹配只是警告信息,真正严重的错误在于:无法load the file system codec,是因为无法引入encodings模块造成的。

    进入终端模式后,试了一下导入encodings之后,发现是正常的。于是在网上百度了下,发现可能是因为PYTHONPATH变量未设置造成的。然后设置PYTHONPATH变量为“%USERPROFILE%\AppData\Local\Programs\Python\Python35\DLLs;%USERPROFILE%\AppData\Local\Programs\Python\Python35\Lib;%USERPROFILE%\AppData\Local\Programs\Python\Python35\Lib\site-packages”,然后再启动Apache服务器,发现一切正常了。

    Python3.5是一个比较新的版本,很多东西和之前的版本不一样,下面这些环境变量都需要设置,否则可能会碰到意思不到的问题:

    • 在PATH中增加路Python的相关路径
      需要在PATH变量中增加%USERPROFILE%\AppData\Local\Programs\Python\Python35\Scripts和%USERPROFILE%\AppData\Local\Programs\Python\Python35。当然,这个可以在安装Python3.5的时候勾选一下就可以了,默认选项是不增加。

    • 设置PYTHONPATH
      这个需要新增PYTHONPATH变量,值设置成“%USERPROFILE%\AppData\Local\Programs\Python\Python35\DLLs;%USERPROFILE%\AppData\Local\Programs\Python\Python35\Lib;%USERPROFILE%\AppData\Local\Programs\Python\Python35\Lib\site-packages”。

    • 增加PATHEXT增加Python脚本的扩展名
      这个需要将.PY和.PYW增加到PATHEXT环境变量中。设置完成后执行Python脚本时,只需要输入文件名即可。

    相关文章

      网友评论

      • 7753907a6ac5:3.6.1的可以吗
        远飞的大雁2010:@yuhuayiyu 可以的。
      • 青南:我已经搞定了。是配置文件顺序的问题。
      • 青南:Apache 2.4 的log里面都没有报错信息。
        远飞的大雁2010:@青南 你可以先用静态网页试试,Apache有没有问题。如果没问题的话,就是你python程序的问题了。
        最重要的还是看日志。
      • 青南:我遇到的问题是,Apache可以启动,但是我打开网页,会提示:
        无法访问此网站

        网址为 http://127.0.0.1:8888/ 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。

        请问这可能是什么问题?

        Windows 7 64 bit + Python 3.5.2 64 bit + Apache 2.4 + mod_wsgi-4.4.23+ap24vc14-cp35-cp35m-win_amd64

      本文标题:在Windows环境中使用Python3.5部署Apache2.

      本文链接:https://www.haomeiwen.com/subject/leejettx.html