Как сделать 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__)