Visual studio code VSCode中对气流插件的Intellisense支持

Visual studio code VSCode中对气流插件的Intellisense支持,visual-studio-code,airflow,Visual Studio Code,Airflow,我正试图找到一种方法,使VSCode Python intellisense与之协同工作 插件操作符的导入路径如下: from airflow.operators import MyPluginOperator VSCode无法解析此导入,因为它仅在运行时通过airflow插件系统有效 有没有办法配置VSCode来解决此导入问题?Airflow通过在Airflow/plugins文件夹中搜索AirflowPlugin子类并在运行时将它们添加到Airflow命名空间中,动态加载插件。以下是来自气

我正试图找到一种方法,使VSCode Python intellisense与之协同工作

插件操作符的导入路径如下:

from airflow.operators import MyPluginOperator
VSCode无法解析此导入,因为它仅在运行时通过airflow插件系统有效


有没有办法配置VSCode来解决此导入问题?

Airflow通过在
Airflow/plugins
文件夹中搜索
AirflowPlugin
子类并在运行时将它们添加到
Airflow
命名空间中,动态加载插件。以下是来自
气流/operators/\uuuuu init\uuuuuu.py
的代码:

# Imports operators dynamically while keeping the package API clean,
# abstracting the underlying modules
...
def _integrate_plugins():
    """Integrate plugins to the context"""
    from airflow.plugins_manager import operators_modules
    for operators_module in operators_modules:
        sys.modules[operators_module.__name__] = operators_module
        globals()[operators_module._name] = operators_module

VS代码无法处理它。甚至像PyCharm这样的“大”Python IDE。VS代码不可能知道特定文件夹中的一段代码稍后将在aiffort.operator中转换。“python.autoComplete.extrapath”也不会有帮助。您应该只希望有人在某处为Airflow编写VS代码扩展:)

自2.0.0版以来,Airflow处理插件导入的方式有:

通过气流导入插件中添加的操作符、传感器、挂钩。{操作符、传感器、挂钩}。不再支持,这些扩展应该作为常规python模块导入。有关更多信息,请参阅:模块管理和创建自定义运算符

下一个重要的考虑事项是,气流添加<强> dAgs/<强>,<强>插件/< /强>,和<强>配置/< /强>目录到Python PATH Env. 按照文档中的规范,您可以创建

MyCustomOperator
aiffair\u home/plugins/custom\u operator/
目录中。然后你可以这样使用它:

from custom_operator.my_custom_operator导入MyCustomOperator
对于dag:
sample\u custom\u task=MyCustomOperator(task\u id='sample-task')
到目前为止,dag还可以运行,但根据我的经验,VSCode IntelliSense还不能工作。要使其工作,您需要将路径添加到
/plugins
,就像气流运行时一样。根据您的设置,有几种方法可以做到这一点。目标是为python解释器添加一个额外的路径,VSCode正在“使用”(确保选择与项目相关的解释器)

一个常见的解决方案是使用env
PYTHONPATH
将我们的路径附加到解释器知道的路径上。在我的例子中,我使用的是一个虚拟环境,因此按照本文中的说明,我创建了一个.pth文件,其路径是我想要添加的,并在
airflow\u home/venv/lib/my\u python\u version/site packages/

按照我们示例中的路径,这将创建这样一个文件:

cd$(python-c“from distutils.sysconfig import get_python_lib;print(get_python_lib())”)
echo airflow\u home/plugins>airflow\u plugins\u example.pth
完成后,重新加载VSCode(也可以更改为另一个解释器,然后返回),您应该会看到intelliSense正常工作


希望能成功

谢谢你的解释。我将尝试为airflow插件编写VSCode扩展。@J.Doe您启动了扩展吗?“如果不是的话,我想试一试。”德维里扎基还没有!如果你能让它工作,请告诉我们。@DvirYitzchaki嘿,我刚刚发现这篇文章似乎对钩子/操作符非常有效:我一直收到导入错误。你能签出一个关于这个的问题吗?嗨,谢谢你的详细解释。在Airflow 1.x中,您可以毫无问题地进行同样的思考。我将所有操作符放在plugin/operators中,并将一个.env文件添加到我的vscode根目录中,从而将插件目录添加到python路径中。与.pth文件相比,它似乎更容易一些。请看这篇文章作为参考:很高兴知道!我还没有在Airflow 1.x上试用过。当我试图弄清楚这一点时,我确实看到了您提到的文章,但当时我不清楚如何将plugins目录作为源根添加到IDE中(文章中没有详细介绍)。我认为整体的关键概念是将路径添加到/plugins,这是实现这一点的方法,
PYTHONPATH
env var。另外,我认为重要的是要注意,与前面的答案相反,VSCode IntelliSense与气流插件配合使用效果很好。