2012-08-25 1 views
12

Sono nuovo nella programmazione e ho provato a lavorare con il tutorial del flask. http://flask.pocoo.org/docs/tutorial/tutorial flaskr; impossibile importare flaskr (initialize database)

mi sono bloccato su questa parte (dal readme su github) quando si tenta di eseguire l'applicazione: https://github.com/mitsuhiko/flask/tree/master/examples/flaskr/

fuoco una shell Python ed eseguire questo:

from flaskr import init_db; init_db() 

I ottenere questo errore quando provo a eseguire il comando in shell python:

Import error: No module named flaskr 

E ottengo questo errore quando I si tenta di eseguire un'applicazione a livello locale:

sqlite3.OperationalError 
OperationalError: unable to open database file 

Ho cercato per soluzione per diverse ore ormai, ma senza alcun risultato. Qualche idea su cosa potrei controllare? Grazie.

risposta

5

Il modo più semplice per realizzare ciò che serve è di accendere la shell Python nella stessa cartella come si deve flaskr:

# I'm assuming that python is available on the command line 
$ cd path/to/flaskr 
$ python 

# Python then runs and you can import flaskr 
>>> from flaskr import init_db; init_db() 
>>> exit() 

Il trucco è che quando si esegue Python appare solo in un certo numero di di posti per modules and packages - puoi vedere quali posti eseguendo:

>>> from sys import path 
>>> for fp in path: 
...  print fp 

dal interprete Python. Se il percorso di flaskr non è in quella lista, flaskr non può essere importato. Di default Python aggiunge la directory in cui è avviato al suo percorso di ricerca (ecco perché iniziamo Python nella directory che contiene flaskr.)

Dopo aver eseguito init_db dovresti essere in grado di eseguire l'applicazione e vedere tutto ciò che funziona .

+0

Wow, grazie per la rapida inversione di tendenza! Questa è stata una spiegazione molto utile e sono riuscito a far funzionare l'app. Grazie ancora. –

+0

@JamieB - felice di poterti aiutare! Goditi il ​​tutorial. –

+0

Quando eseguo l'importazione tramite l'interprete Python ottengo 'RuntimeError: Lavoro al di fuori del contesto dell'applicazione. – caspii

2

A chiunque altro che trova, aggiungere init_db() alla esecutore principale al fine del flaksr app come segue:

if __name__ == '__main__': 
    init_db() 
    app.run() 

Questo dovrebbe risolvere l'errore SQLite e ti impedisca di dover correre init_db() manualmente.

0

La risposta di Sean Viera è stata molto buona, anche se mi piacerebbe aggiungere che ho riscontrato lo stesso problema e voglio aggiungere alla soluzione. Eseguire Python dalla stessa cartella flaskr non era abbastanza per me. E 'stato anche necessario attivare Flask prima di eseguire $ Python eseguendo il comando, in questo modo "venv/bin/attivare.":

$ cd path/to/flaskr 
#active 
$ . venv/bin/activate 
(venv)$ python 

# Python then runs and you can import flaskr 
>>> from flaskr import init_db; 
>>> init_db() 
>>> exit() 
$ 

Speranza quel po' di informazioni aiuta!

4

Se si sta utilizzando una versione di Flask < 0,11, il comando flask non è disponibile. Installare il pacchetto flask-cli in questo caso.

pip install flask-cli 
24

La cosa che ha risolto il tutto per me stava cambiando

export FLASK_APP=flaskr 

a

export FLASK_APP=flaskr.py 

Tratto da here

2

Quando diciamo:

export FLASK_APP=flaskr 

in nessun modo Python capisce dove esiste il pacchetto "flaskr.py".

Uno dei modi per risolvere il problema è scegliere il percorso corretto in cui risiede "flaskr.py". Per esempio, modificare la directory di lavoro corrente al punto in cui si trova il file e:

export PYTHONPATH=`pwd` 

Quindi è possibile eseguire "run pallone" ovunque si desideri.

PS: tutorial pallone sembra rotto. :)

0
$set FLASK_APP=flaskr 
$python -m flask initdb 
$python -m flask run