如何让Eclipse/PyDev在Windows上识别Flask扩展?
我偶然发现了这篇文章,并按照里面的步骤操作。但是,pyDev却无法识别我的flask扩展,这让我很烦恼。这里有一件事(我觉得这是关键):
Touch /site-packages/flaskext/__init__.py
我觉得Touch
是一个Unix系统的工具。在Windows上有没有类似的命令呢?
4 个回答
如果你的项目在一个虚拟环境中,并且你想把这个项目添加到Eclipse里,以便项目可以使用虚拟环境中安装的库,那么你可以按照以下步骤操作。
步骤1:假设你的虚拟环境的绝对路径是:C:\Users\sadegh\Desktop\flask_eclipse\fe\venv
接下来,进入 窗口->首选项->PyDev->解释器->Python解释器
,在 Scripts
目录下,你会看到 python.exe
, 这个就是分配给这个虚拟环境的Python解释器。我们将把这个可执行文件添加到Eclipse中作为新的Python解释器。
步骤2:继续进入 窗口->首选项->PyDev->解释器->Python解释器
,
在 解释器名称
字段中输入你想要的任何名称,然后在 解释器可执行文件
字段中输入步骤1中提到的 python.exe
的绝对路径。
选择所有项目,然后点击 确定
。
步骤3:在上面的面板中选择新添加的解释器,然后在下面的面板中切换到 强制内置
标签,点击下面面板右侧的新建按钮。
在弹出的窗口中输入 flask.ext
。
步骤4:现在一切都设置好了:
如果你想开始一个新项目:在创建新的 PyDev项目
时,选择我们创建的新解释器作为这个项目的解释器。
如果你想把一个现有项目转换为虚拟环境中的Flask项目,右键点击项目,选择属性,在 PyDev-解释器/语法
中把解释器改为我们创建的新解释器。
注意:如果你希望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__)
我也在为这个问题苦恼,问题似乎出在Flask导入扩展的方式上。如果你打开 flask/ext/__init__.py
文件,你会发现它使用了一个叫做importer的东西。我觉得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
Eclipse 默认使用静态分析模块。flask.ext
是动态生成导入列表的。要强制使用 Python shell 进行动态分析,可以把 flask.ext
加入强制内置列表中。
你可以去 Preferences -> PyDev -> Interpreters -> Python Interpreter
。选择你的解释器,然后去 Forced Builtins
标签。点击 New...
,然后输入 flask.ext
。
这样做是为了让 PyDev 强制通过 shell 分析这个模块。
想了解更多细节,可以查看 PyDev 手册。