如何让Eclipse/PyDev在Windows上识别Flask扩展?

12 投票
4 回答
15672 浏览
提问于 2025-04-17 16:36

我偶然发现了这篇文章,并按照里面的步骤操作。但是,pyDev却无法识别我的flask扩展,这让我很烦恼。这里有一件事(我觉得这是关键):

Touch /site-packages/flaskext/__init__.py

我觉得Touch是一个Unix系统的工具。在Windows上有没有类似的命令呢?

4 个回答

2

如果你的项目在一个虚拟环境中,并且你想把这个项目添加到Eclipse里,以便项目可以使用虚拟环境中安装的库,那么你可以按照以下步骤操作。

步骤1:假设你的虚拟环境的绝对路径是:C:\Users\sadegh\Desktop\flask_eclipse\fe\venv

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__)
2

我也在为这个问题苦恼,问题似乎出在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

26

Eclipse 默认使用静态分析模块。flask.ext 是动态生成导入列表的。要强制使用 Python shell 进行动态分析,可以把 flask.ext 加入强制内置列表中。

你可以去 Preferences -> PyDev -> Interpreters -> Python Interpreter。选择你的解释器,然后去 Forced Builtins 标签。点击 New...,然后输入 flask.ext

这样做是为了让 PyDev 强制通过 shell 分析这个模块。

想了解更多细节,可以查看 PyDev 手册

撰写回答