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

在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脚本时,只需要输入文件名即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容