【问题标题】:Using Python 3.3 in OpenShift's book example在 OpenShift 的书籍示例中使用 Python 3.3
【发布时间】:2014-06-18 13:59:16
【问题描述】:

OpenShift 最近出版了一本书,“OpenShift 入门”。对于刚起步的人来说,这是一个很好的指南。

在第 3 章中,他们展示了如何修改模板应用程序以使用 Python 2.7 和 Flask。我们的要求是 Python 3.3。

在第 19 页,对 wsgi.py 的修改之一是:execfile(virtualenv, dict(file=virtualenv))。 execfile 在 3.x 中被取消了。 * 中有关于如何翻译的示例,但我不清楚如何将这些示例应用于这种情况。

有人对这个问题有任何见解吗?

【问题讨论】:

  • 我还没有阅读新文档。听起来它们仍然不完整。实际上有两个入口点来启动你的 python 应用程序。 wsgi.py 和 app.py。如果您使用的是 OS 的 apache 服务器,请使用 wsgi.py。 app.py 如果您想使用自己的服务器(cherrypy、女服务员、简单服务器)。明天我在电脑旁边的时候可以给你启动代码。
  • 用户实际上指的是这本书openshift.com/blogs/…,并不打算完整
  • 您的确切问题似乎在下面得到了回答。如果您仍然帮助真正让一切正常工作,请告诉我。

标签: python python-3.x openshift


【解决方案1】:

this question所示,可以换行

execfile(virtualenv, dict(__file__=virtualenv))

通过

exec(compile(open(virtualenv, 'rb').read(), virtualenv, 'exec'), dict(__file__=virtualenv))

在我看来,最好把它分解成几个更简单的部分。我们还应该使用上下文处理程序来处理文件::

with open(virtualenv, 'rb') as exec_file:
    file_contents = exec_file.read()
compiled_code = compile(file_contents, virtualenv, 'exec')
exec_namespace = dict(__file__=virtualenv)
exec(compiled_code, exec_namespace)

以这种方式分解它也会使调试更容易(实际上:可能)。我没有对此进行测试,但它应该可以工作。

【讨论】:

  • 非常感谢 cjrh 的回答和 fantasma 提供的额外帮助。两个答案都很好。现在很清楚如何使用 Python v3.3 为 OpenShift 集成 Flask。可以从informationanthology.net/literature.zip 下载此结果的代码。欢迎任何人参与。
【解决方案2】:

如果您在 Python3 中的 wsgi.py 文件上遇到 virtualenv 设置问题,我已经解决了只是删除它。

这是我的 wsgi.py 文件,它正在工作

#!/usr/bin/python

from flaskapp import app as application

if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    httpd = make_server('0.0.0.0', 5000, application)
    # Wait for a single request, serve it and quit.
    #httpd.handle_request()
    httpd.serve_forever()

【讨论】:

    最近更新 更多