Using Python 3.3 in OpenShift's book example

半世苍凉 提交于 2019-12-21 02:07:07

问题


OpenShift recently published a book, "Getting Started with OpenShift". It is a good guide for someone just starting out.

In Chapter 3 they show how to modify a template application to use Python 2.7 and Flask. Our requirement is for Python 3.3.

On Page 19, one of the modifications to wsgi.py is: execfile(virtualenv, dict(file=virtualenv)). execfile was done away with in 3.x. There are examples in StackOverflow on how to translate but it is not clear to me how to apply those to this case.

Does anyone have any insight into this issue?


回答1:


As indicated in this question, you can replace the line

execfile(virtualenv, dict(__file__=virtualenv))

by

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

In my opinion, it would be better to break this up into a few simpler pieces. Also we should use a context handler for the file handling::

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)

Breaking it up in this way will also make debugging easier (actually: possible). I haven't tested this but it should work.




回答2:


If you are facing issues with virtualenv settings on wsgi.py file in Python3 I have solved just deleting it.

This is my wsgi.py file and it's working

#!/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()


来源:https://stackoverflow.com/questions/23418735/using-python-3-3-in-openshifts-book-example

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!