12

我偶然发现了这篇文章并遵循了所有步骤。但是 pyDev 不会看到我的烧瓶扩展,这真的很烦人。只有一件事(我认为这是关键):

Touch /site-packages/flaskext/__init__.py

Touch我认为是一个unix util。在 Windows 上是否有与此等价的功能?

4

4 回答 4

26

Eclipse 默认使用模块的静态分析。flask.ext动态构建导入列表。要使用 Python shell 强制动态分析,请添加flask.ext到强制内置列表。

Preferences -> PyDev -> Interpreters -> Python Interpreter。选择您的口译员,转到Forced Builtins选项卡。单击New...并输入flask.ext

这需要 PyDev 通过 shell 强制分析模块。

有关更多详细信息,请参阅PyDev 手册

于 2014-02-14T15:39:20.957 回答
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

于 2013-05-16T10:42:59.383 回答
2

如果您的项目位于虚拟环境中,并且您希望在 eclipse 中添加该项目,以便该项目使用安装在虚拟环境中的库,那么您应该按照以下步骤操作。

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

venv文件夹的内容

在目录window->preferences->PyDev->interpretors->Python InterpretorScripts,有python.exe 在此处输入图像描述 哪个是分配给这个虚拟环境的python解释器。这个可执行文件将是我们将添加到 eclipse 中的新 python 解释器。

第2步:转到window->preferences->PyDev->Interpreters->Python Interpreter 在此处输入图像描述

在右侧窗格中,您将看到: 在此处输入图像描述

单击新按钮,然后将弹出此窗口: 在此处输入图像描述

在该字段中写入您想要的任何内容并在该字段中Interpreter Name写入步骤1中提到的python.exe文件的绝对路径Interpreter Executable

点击后OK 会弹出: 在此处输入图像描述

选择所有项目然后单击OK

第三步:在上面的窗格中选择新添加的解释器,然后在下面的窗格中转到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__)
于 2017-02-11T19:41:31.103 回答
0

touch如果不存在则创建一个空白文件,如果存在则更新文件的修改时间。

为此,echo > /site-packages/flashext/__init__.py在命令行中就足够了。(该文件不会为空,而只包含一个换行符,它在语义上与 Python 等效)。

于 2013-02-21T08:10:08.310 回答