2012-08-25 5 views
12

Soy nuevo en la programación, y traté de trabajar con el tutorial del matraz. http://flask.pocoo.org/docs/tutorial/tutorial de flaskr; no puedo importar flaskr (base de datos de inicialización)

estoy atascado en esta parte (del readme en github) al intentar ejecutar la aplicación: https://github.com/mitsuhiko/flask/tree/master/examples/flaskr/

fuego hasta una cáscara de pitón y ejecutar este:

from flaskr import init_db; init_db() 

I Obtener este error cuando trato de ejecutar el comando en el shell de Python:

Import error: No module named flaskr 

Y aparece este error cuando trato de ejecutar aplicaciones de forma local:

sqlite3.OperationalError 
OperationalError: unable to open database file 

que he estado buscando la solución durante varias horas, pero en vano. ¿Alguna idea sobre lo que podría verificar? Gracias.

Respuesta

5

La forma más sencilla de lograr lo que necesita es encender el terminal de Python en la misma carpeta que tiene 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() 

El truco es que cuando se ejecuta Python que sólo se ve en un cierto número de plazas para modules and packages - puede ver qué lugares ejecutando:

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

desde el intérprete de Python. Si la ruta a flaskr no está en esa lista, no se puede importar flaskr. De manera predeterminada, Python agrega el directorio en el que se inicia a su ruta de búsqueda (razón por la cual iniciamos Python en el directorio que contiene flaskr.)

Una vez que haya ejecutado init_db debería poder ejecutar la aplicación y ver todo funcionando .

+0

¡Guau, gracias por el cambio rápido! Esa fue una explicación muy útil, y pude poner en marcha la aplicación. Gracias de nuevo. –

+0

@JamieB - ¡me alegro de poder ayudar! Disfruta el tutorial –

+0

Cuando hago la importación a través del intérprete de Python obtengo 'RuntimeError: trabajando fuera del contexto de la aplicación'. – caspii

2

Para cualquier otra persona que se encuentra presente, añadir init_db() al ejecutor principal al final de su flaksr aplicación de la siguiente manera:

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

Eso debería resolver el error sqlite y que deje de tener que ejecutar init_db() manualmente.

0

La respuesta de Sean Viera fue muy buena, aunque me gustaría añadir que estaba encontrando el mismo problema y quiero agregar a la solución. Ejecutar Python desde la misma carpeta de flaskr no fue suficiente para mí. También era necesario para activar el frasco antes de ejecutar $ Python mediante la ejecución del comando, al igual que "Venv/bin/activar.":

$ 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() 
$ 

esperanza que poco más de información ayuda!

4

Si está utilizando una versión de Flask < 0.11, el comando flask no está disponible. Instale el paquete flask-cli en ese caso.

pip install flask-cli 
24

Lo que lo fijó para mí estaba cambiando

export FLASK_APP=flaskr 

a

export FLASK_APP=flaskr.py 

Tomado de here

2

Cuando decimos:

export FLASK_APP=flaskr 

de ninguna manera python entiende dónde existe el paquete "flaskr.py".

Una de las formas de resolver el problema es elegir el camino correcto donde reside el "flaskr.py". Por ejemplo, cambie el directorio de trabajo actual en donde existe el archivo y:

export PYTHONPATH=`pwd` 

A continuación, se puede ejecutar "run frasco de" cualquier lugar que desee.

PD: el tutorial del matraz parece estar roto. :)

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