【问题标题】:How to get worked mod_wsgi with .pyo files only (without .py)?如何仅使用 .pyo 文件(没有 .py)使用 mod_wsgi?
【发布时间】:2011-09-13 12:37:12
【问题描述】:

我正在尝试启动 apache + mod_wsgi,并且我有严格的限制将源 .py 文件放到服务器上,所以我先编译它们并将 .pyo 文件放到服务器上。

这就是我在 apache conf 中的内容:

LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonPath /var/wwwroot/
WSGIPythonOptimize 1
WSGIScriptAlias /home /var/wwwroot/home.pyo

但是 mod_wsgi 引发了错误(从 apache 错误日志中截取):

Failed to parse WSGI script file '/var/wwwroot/home.pyo'.
Exception occurred processing WSGI script '/var/wwwroot/home.pyo'.
File "/var/wwwroot/home.pyo", line 1
      m\xf2
       ^
SyntaxError: invalid syntax

我尝试用谷歌搜索,但找不到 mod_wsgi 是否与预编译的 python 代码一起使用的答案。

【问题讨论】:

  • 限制是否与您可能提供的 IP 相关,或者是否有阻止 .py 文件的内容?如果没有,请执行诸如 have wsgi_launch.py 之类的操作,这只是 from home import *
  • 你的意思是把所有预编译的代码都放在前面,然后放一个未编译的 .py 文件来加载模块并运行它们吗?如果没有机会让预编译的代码工作,这是一个好主意。它看起来像解决方法,但我相信有一种简单的方法可以做到这一点。谢谢。
  • 好的,把它变成一个包含更多信息的答案。

标签: python apache mod-wsgi


【解决方案1】:

这已在 mod_wsgi 列表中得到回答:

http://groups.google.com/group/modwsgi/browse_thread/thread/5da316e3480eab7f

简短的回答是,只有 WSGI 脚本文件需要是源代码,正如其他人指出的那样,只要有适当的行来设置 sys.path (如有必要),然后从.pyo 其他地方的模块版本。

【讨论】:

    【解决方案2】:

    一个简单的解决方法是在您的home.pyo 旁边添加一个仅包含from home import * 的额外文件。你可以叫它foo.py,你可以叫它home.wsgi,如果你愿意,你可以叫它the-quick-brown-fox-ate-the-lazy-dog。 (因此,如果您在使用扩展名“.py”时遇到问题,也没关系。)

    【讨论】:

    • 我没有遇到带有 .py 扩展名的文件的问题,我在运行预编译代码时遇到了问题。我仅限于将资源放到生产服务器上。我知道python预编译的代码可以被反编译,但无论如何。非常感谢,如果没有机会“正确”地做,我会尝试你的解决方法:)
    • @Ruslan:“正确地做”意味着不依赖 .pyo 文件。如果你坚持的话,我想你可以尝试反编译它们。
    【解决方案3】:

    mod_wsgi 仅适用于 *.pyo 文件,我遇到了这个确切的问题,我把头撞在墙上几个小时试图弄清楚。

    如果没有常规的旧“.py”格式的 python 源代码,mod_wsgi 将无法工作。

    【讨论】:

    • 哦……谢谢!我已经快要崩溃了,我得出了同样的结论。好像我要回到mod_python了,悲伤但真实。
    • @Ruslan:在我看来,当你可以只用一个单行源 Python 文件来弥补差距时,这似乎不是什么大问题。如果 mod_wsgi 性能更好,那么返回 mod_python 肯定是不够的。
    猜你喜欢
    • 2012-07-13
    • 1970-01-01
    • 2011-01-27
    • 2022-10-09
    • 2018-07-22
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多