如何使eclipse/pydev乐于在windows上看到flask扩展?

2024-05-09 20:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Touch /site-packages/flaskext/__init__.py

我认为Touch是一个unix实用程序。在窗户上也有类似的东西吗?


Tags: py实用程序烧瓶initpackagesarticleunixsite
3条回答

我也在努力解决这个问题,问题似乎是烧瓶进口的方式扩展。如果打开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

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

转到Preferences -> PyDev -> Interpreters -> Python Interpreter。选择您的解释器,转到Forced Builtins选项卡。单击New...,然后输入flask.ext

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

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

如果您的项目位于虚拟环境中,并且希望在eclipse中添加该项目,以便该项目使用安装在虚拟环境中的库,则应遵循以下步骤。

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

The content of venv folder

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

第二步: 转到window->preferences->PyDev->Interpreters->Python Interpreterenter 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

第四步:一切都准备好了:

如果要启动新项目: 创建新的PyDev Project时,请选择我们创建的新解释器作为此项目的解释器。 enter image description here

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

相关问题 更多 >