我正在使用 Flask 开发一个 python 应用程序。目前,我希望这个应用程序在本地运行。它通过 python 在本地运行良好,但是当我使用 cx_freeze 将其转换为 Windows 的 exe 时,我不能再使用 Flask.render_template() 方法。在我尝试执行 render_template 的那一刻,我收到一个 http 500 错误,就像我尝试渲染的 html 模板不存在一样。
主 python 文件称为 index.py。起初我试图运行:cxfreeze index.py
. 这不包括 cxfreeze“dist”目录中 Flask 项目的“templates”目录。然后我尝试使用这个 setup.py 脚本并运行python setup.py build
. 这现在包括模板文件夹和 index.html 模板,但是当它尝试呈现模板时我仍然收到 http: 500 错误。
from cx_Freeze import setup,Executable
includefiles = [ 'templates\index.html']
includes = []
excludes = ['Tkinter']
setup(
name = 'index',
version = '0.1',
description = 'membership app',
author = 'Me',
author_email = 'me@me.com',
options = {'build_exe': {'excludes':excludes,'include_files':includefiles}},
executables = [Executable('index.py')]
)
这是脚本中的示例方法:
@app.route('/index', methods=['GET'])
def index():
print "rendering index"
return render_template("index.html")
如果我index.py
在控制台中运行,我会得到:
* Running on http://0.0.0.0:5000/
rendering index
127.0.0.1 - - [26/Dec/2012 15:26:41] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [26/Dec/2012 15:26:42] "GET /favicon.ico HTTP/1.1" 404 -
并且页面在我的浏览器中正确显示,但是如果我运行index.exe
,我会得到
* Running on http://0.0.0.0:5000/
rendering index
127.0.0.1 - - [26/Dec/2012 15:30:57] "GET / HTTP/1.1" 500 -
127.0.0.1 - - [26/Dec/2012 15:30:57] "GET /favicon.ico HTTP/1.1" 404 -
和
Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
在我的浏览器中。
如果我返回原始 html,例如
@app.route('/index', methods=['GET'])
def index():
print "rendering index"
return "This works"
然后它工作正常。因此,一种可能的解决方法是停止使用 Flask 的模板并将所有 html 逻辑硬编码到主 python 文件中。不过这会变得非常混乱,所以如果可能的话,我想避免它。
我正在使用 Python 2.7 32 位、Cx_freeze 用于 Python 2.7 32 位和 Flask 0.9
感谢您的任何帮助和想法!