如何让eclipse / pydev高兴地看到Windows上的烧瓶扩展?

时间:2013-02-21 08:07:17

标签: python eclipse flask pydev flask-extensions

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

Touch /site-packages/flaskext/__init__.py

我认为

Touch是一个unix工具。在Windows上是否有相同的功能?

4 个答案:

答案 0 :(得分:26)

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

转到Preferences -> PyDev -> Interpreters -> Python Interpreter。选择您的口译员,转到Forced Builtins标签。点击New...,然后输入flask.ext

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

有关详细信息,请参阅PyDev manual

答案 1 :(得分: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 import,即from sqlalchemy import Column, ForeignKey

答案 2 :(得分:1)

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

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

The content of venv folder

转到window->preferences->PyDev->interpretors->Python InterpretorScripts目录中,有python.exe enter image description here 这是已分配给此虚拟环境的python解释器。这个可执行文件将是我们将添加到eclipse的新python解释器。

步骤2: 转到window->preferences->PyDev->Interpreters->Python Interpreter enter image description here

在右侧窗格中,您将看到: enter image description here

点击新按钮,然后会弹出这个窗口: enter image description here

Interpreter Name字段中写下您想要的任何内容,并编写Interpreter Executable字段

中步骤1中提到的python.exe文件的绝对路径

点击OK后会弹出: enter image description here

选择所有项目,然后点击OK

步骤3:在上面的窗格中选择新添加的解释器,然后在下面的窗格中转到Forced Builtin选项卡,然后单击此下方窗格右侧的新按钮。

enter image description here

并在弹出的窗口中写下flask.ext

第4步:现在一切都已设定:

如果你想开始一个新项目: 当您创建新的PyDev Project时,选择我们创建的新解释器作为此项目的解释器。 enter image description here

如果要将现有项目转换为虚拟环境中的烧瓶项目,请右键单击项目并转到属性,然后在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__)

答案 3 :(得分:0)

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

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