Подтвердить что ты не робот

Учебник flaskr; не может импортировать flaskr (инициализировать базу данных)

Я новичок в программировании и стараюсь работать через учебник по фляге. http://flask.pocoo.org/docs/tutorial/

Я застрял в этой части (из readme on github) при попытке запустить приложение: https://github.com/mitsuhiko/flask/tree/master/examples/flaskr/

Запустите оболочку python и запустите это:

from flaskr import init_db; init_db()

Я получаю эту ошибку, когда пытаюсь запустить команду в оболочке python:

Import error: No module named flaskr

И я получаю эту ошибку, когда я пытаюсь запустить приложение локально:

sqlite3.OperationalError
OperationalError: unable to open database file

Я искал решение в течение нескольких часов, но безрезультатно. Любые мысли о том, что я могу проверить? Спасибо.

4b9b3361

Ответ 1

Самый простой способ выполнить то, что вам нужно, - запустить оболочку Python в той же папке, где у вас есть фласк:

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

Фокус в том, что при запуске Python он просматривается только в определенном количестве мест для модулей и пакетов - вы можете видеть, какие места работает:

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

из интерпретатора Python. Если путь к flaskr отсутствует в этом списке, флажок не может быть импортирован. По умолчанию Python добавляет каталог, в который он запускается, в свой путь поиска (вот почему мы запускаем Python в каталоге, содержащем фласкр.)

Как только вы запустите init_db, вы сможете запустить приложение и посмотреть, как все работает.

Ответ 2

Вещь, которая исправила его для меня, меняла

export FLASK_APP=flaskr

к

export FLASK_APP=flaskr.py

Взято из здесь

Ответ 3

Если вы используете версию Flask < 0.11 команда flask недоступна. Установите пакет flask-cli в этом случае.

pip install flask-cli

Ответ 4

Другим, кто находит это, добавьте init_db() к главному исполнителю в конец вашего приложения flaksr следующим образом:

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

Это должно решить ошибку sqlite и не дать вам запустить init_db() вручную.

Ответ 5

Когда мы говорим:

export FLASK_APP=flaskr

отнюдь не означает, что python понимает, где существует пакет "flaskr.py".

Одним из способов решения проблемы является выбор правильного пути, где находится "flaskr.py". Например, измените текущий рабочий каталог на тот файл, где находится файл, и:

export PYTHONPATH=`pwd`

Затем вы можете выполнить "запуск колбы" в любом месте.

PS: учебник по фляге кажется сломанным.:)

Ответ 6

Ответ Sean Viera был очень хорошим, хотя я хотел бы добавить, что я столкнулся с одной и той же проблемой и хочу добавить к решению. Запускать Python из той же папки flaskr было недостаточно для меня. Также необходимо было активировать Flask перед запуском $Python, выполнив команду ". Venv/bin/activate", например:

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

Надеюсь, что дополнительный бит информации поможет!

Ответ 7

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