Flask を使用して Python アプリを開発しています。現時点では、このアプリをローカルで実行したいと考えています。Python を使用してローカルで正常に実行されますが、cx_freeze を使用して Windows 用の exe に変換すると、Flask.render_template() メソッドを使用できなくなります。render_template を実行しようとすると、レンダリングしようとしている html テンプレートが存在しないかのように、http 500 エラーが発生します。
メインの python ファイルは index.py と呼ばれます。最初に実行しようとしました: cxfreeze index.py
. これには、Flask プロジェクトの「templates」ディレクトリが cxfreeze の「dist」ディレクトリに含まれていませんでした。そこで、この 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 ビット、Python 2.7 32 ビット用の Cx_freeze、および Flask 0.9 を使用しています。
助けとアイデアをありがとう!