Запретить PyDev от перемещения определенных импортов - PullRequest
2 голосов
/ 19 января 2012

При программировании в 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 оставить этот конкретный импорт в одиночку, способ отключить организацию импорта для каждого файла или что-то подобное?

1 Ответ

1 голос
/ 19 января 2012

Я не использую PyDev, но вы пытались сбросить его анализатор импорта?Это грязно, но вы можете попробовать что-то вроде:

if 1: import views

Поскольку строка не начинается с «import», возможно, PyDev пропустит ее?

...