Sto utilizzando Flask per sviluppare un'applicazione python. Al momento, voglio che questa app venga eseguita localmente. Funziona localmente bene tramite python, ma quando uso cx_freeze per trasformarlo in un exe per Windows, non posso più usare il metodo Flask.render_template(). Nel momento in cui provo ad eseguire un render_template, ottengo un errore http 500, esattamente come se il template html che sto cercando di rendere non esistesse.utilizzando cx_freeze sull'app mobile
Il file python principale è denominato index.py. All'inizio ho provato a eseguire: cxfreeze index.py
. Questo non includeva la directory "templates" dal progetto Flask nella directory "dist" di cxfreeze. Quindi, ho provato a utilizzare questo script setup.py ed eseguire python setup.py build
. Questo include ora la cartella dei modelli e il modello index.html, ma ottengo ancora l'errore http: 500 quando tenta di eseguire il rendering del modello.
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 = '[email protected]',
options = {'build_exe': {'excludes':excludes,'include_files':includefiles}},
executables = [Executable('index.py')]
)
Ecco un metodo di esempio dallo script:
@app.route('/index', methods=['GET'])
def index():
print "rendering index"
return render_template("index.html")
Se corro index.py
poi nella console ottengo:
* 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 -
e la pagina viene visualizzata correttamente nel mio browser , ma se corro index.exe
, ottengo
* 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 -
e
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.
nel mio browser.
Se restituisco HTML grezzo, ad es.
@app.route('/index', methods=['GET'])
def index():
print "rendering index"
return "This works"
quindi funziona correttamente. Quindi una possibile soluzione è smettere di usare i modelli di Flask e hardcode tutta la logica html nel file python principale. Questo diventa molto complicato, quindi mi piacerebbe evitarlo se possibile.
sto usando Python 2.7 a 32 bit, Cx_freeze per Python 2.7 a 32 bit, e Flask 0,9
Grazie per qualsiasi aiuto e le idee!