2014-12-06 20 views
1

Я работаю над приложением колб, и я иметь следующую структуру каталогов:Невозможно импортировать модуль даже после добавления __init__.py

flask_app/ 
| 
|-- __init__.py 
|-- app.py 
|-- views.py 
|-- static/ 
|-- templates/ 

Пример содержимое файлов является:

app.py:

from flask import Flask 
import views 

app = Flask(__name__) 

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

views.py:

from app import app 

@app.route('/') 
def index(): 
    return "Hello, world!"a 

Файл __init__.py пуст.

Когда я запускаю приложение, сервер запускается, но на индексной странице 404. Я понимаю, что мне нужен файл __init__.py для импорта, поэтому файл views.py не импортируется?

ответ

2

Вы используете круглый импорт. Когда app.py импортирует views, обработка app.py приостанавливает пока views.py процессов. Первое, что views.py делает импорт app от app.py, но app еще не определен, поэтому app.py импортируется. Это приостанавливает обработку views.py и начинает обработку app.py. И т.д.

Flask documentation обеспечивает решение этой проблемы.

app.py

from flask import Flask 

flask = Flask(__name__) 

import views 

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

views.py

from app import app 

@app.route('/') 
def index(): 
    return "Hello, world!" 

EDIT: Глядя в документации колбу, добавляя run.py в каталог выше flask_app и переименование app.py к __init__.py приводит к решаемой задаче.

run.py

from yourapplication import app 
app.run(debug=True) 

Структура каталогов теперь следующим образом:

|run.py 
|flask_app/ 
| 
|-- __init__.py 
|-- app.py 
|-- views.py 
|-- static/ 
|-- templates/ 
+0

Спасибо, ваш ответ указал мне в правильном направлении. Мне пришлось создать отдельный файл run.py в каталоге выше 'flask_blog' и переименовать' app.py' в '__init __. Py', чтобы он работал, но в конце он это сделал. Можете ли вы отредактировать свой ответ, чтобы отразить небольшие изменения? – Bhargav

+0

Спасибо за редактирование. – dirn

0

код внутри if_name == основной будет выполняться в случае, если этот файл был запущен как сценарий, не импортируются.

Вот как это работает для меня:

структура:

-> калькулятор (папка проекта)

----> калькулятор (папка пакет)

--- -----> _ _init___.py

--------> views.py

--------> createdb.py

----> runningerver.ру

INIT .py скрипт

from flask import Flask 

app = Flask(__name__) 
app.config.update(DEBUG=True) 

import createdb 
import views 

runserver.py сценарий

#!/usr/bin/python 

from calculator import app 

app.run() 

и приложение запускается с помощью командной строки, вызвав runserver.py

Смежные вопросы