Как сделать eclipse/pydev счастливым видеть расширения фляг на окнах?

Я наткнулся на эту статью и выполнил все шаги. Но pyDev не увидит мои расширения фляжек и это действительно раздражает. Там только одно (и я думаю, что это ключ):

Touch /site-packages/flaskext/__init__.py

Touch Я думаю, это unix util. Есть ли эквивалент этого в Windows?

Ответ 1

Eclipse по умолчанию использует статический анализ модулей. flask.ext динамически создает список импорта. Чтобы заставить динамический анализ использовать оболочку Python, добавьте flask.ext в список принудительных встроенных функций.

Перейдите к Preferences -> PyDev -> Interpreters -> Python Interpreter. Выберите переводчика, перейдите на вкладку Forced Builtins. Нажмите New... и введите flask.ext.

Это требует, чтобы PyDev принудительно анализировал модуль через оболочку.

Подробнее см. руководство PyDev.

Ответ 2

Я также борюсь с этим, и проблема, похоже, в том, что Flask импортирует расширения. Если вы откроете файл flask/ext/__init__.py, вы увидите, что он использует импортер. Я не думаю, что PyDev это очень нравится, поэтому я отредактировал этот файл с фиксированным импортом:

import flask_login as login
import flask_sqlalchemy as sqlalchemy
import flask_wtf as wtf

def setup():
    from ..exthook import ExtensionImporter
    importer = ExtensionImporter(['flask_%s', 'flaskext.%s'], __name__)
    importer.install()


setup()
del setup

Я также обнаружил, что импорт Flask-SQLAlchemy тоже сломался, поэтому вместо выполнения db.Column, как описано в документации, напрямую используйте импорт sqlalchemy, т.е. from sqlalchemy import Column, ForeignKey

Ответ 3

touch создаст пустой файл, если он не существует, или обновите время модификации файла, если оно существует.

С этой целью echo > /site-packages/flashext/__init__.py в командной строке должно быть достаточно. (Файл не будет пустым, но содержит только одну новую строку, которая семантически эквивалентна Python).

Ответ 4

Если у вас есть проект в виртуальной среде, и вы хотите добавить проект в eclipse, чтобы проект использовал библиотеки, установленные в виртуальной среде, то вы должны выполнить следующие шаги.

шаг 1: скажем, абсолютный путь к вашей виртуальной среде: C:\Users\sadegh\Desktop\flask_eclipse\fe\venv

Содержимое папки venv

перейти к window->preferences->PyDev->interpretors->Python Interpretor в каталоге Scripts есть python.exe введите описание изображения здесь который является интерпретатором python, который был назначен этой виртуальной среде. Этот исполняемый файл будет новым интерпретатором python, который мы добавим в eclipse.

step2: Перейдите к window->preferences->PyDev->Interpreters->Python Interpreter введите описание изображения здесь

В правой панели вы увидите следующее: введите описание изображения здесь

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

напишите все, что угодно, в поле Interpreter Name и напишите абсолютный путь к файлу python.exe, упомянутый в шаге 1 в поле Interpreter Executable

после нажатия OK появится следующее сообщение: введите описание изображения здесь

выберите все элементы, затем нажмите OK

step3: выберите недавно добавленный интерпретатор в приведенной выше области, затем в нижней панели перейдите на вкладку Forced Builtin и нажмите на новую кнопку в правой части этой ниже панели.

введите описание изображения здесь

и в появившемся окне напишите flask.ext.

step4: теперь все установлено:

если вы хотите запустить новый проект: когда вы создаете новый PyDev Project, выберите новый интерпретатор, который мы создали как интерпретатор этого проекта. введите описание изображения здесь

если вы хотите преобразовать существующий проект в проект фляжки в своей виртуальной среде, щелкните правой кнопкой мыши по проекту и перейдите к свойствам, а в PyDev-Interpreter/Grammar измените интерпретатор на новый интерпретатор, который мы создали.

Примечание. Если вы хотите, чтобы eclipse запускал сервер для вас в виртуальной среде, вы можете запустить сервер из кода, который содержит экземпляр Flask(), например:

if __name__ == '__main__': #here i assume you have put this code in a file that    
   app.run()   #contains variable "app", which contains the instance of #Flask(__main__)