При программировании в eclipse + PyDev и использовании среды Flask я заметил, что иногда мешает функция автоматической организации импорта из IDE (вызывается с помощью Ctrl + O ).
Это связано с тем, как Flask решает проблему разделения кода представлений на несколько модулей или пакетов. В основном, если у вас есть модуль views.py
, который содержит ваши обработчики запросов:
from myapp import app
@app.route('/')
def root():
return "Hello world"
и ваше приложение Flask определено в __init__.py
:
from flask import Flask
app = Flask('MyApp')
app.config.from_pyfile('config.py')
@app.before_request
def before_request(): pass # omitted for brevity
@app.teardown_request
def teardown_request(): pass # omitted for brevity
вам нужно import views
в конце последнего файла для функций представления, которые будут добавлены в таблицу маршрутизации Flask. Поскольку views.py
импортирует __init__.py
для доступа к переменной app
, это приводит к циклическому импорту. Тем не менее, он работает нормально и фактически является установившейся практикой, о чем свидетельствует из документации .
К сожалению, PyDev ничего не знает об этой технике. Если мы случайно запустим организацию импорта для __init__.py
(что не редкость, учитывая, насколько полезна эта опция в целом), PyDev с радостью переместит решающий import views
на вершину. Конечно, это приводит к неправильному (неразрешимому) циклическому импорту и раздражающей ошибке времени выполнения.
Есть ли способ предотвратить это - например, #@Directive
, который велит PyDev оставить этот конкретный импорт в одиночку, способ отключить организацию импорта для каждого файла или что-то подобное?