VSCode中对气流插件的Intellisense支持

时间:2019-03-19 11:08:06

标签: visual-studio-code airflow

我正在尝试找到一种使Airflow Plugins与VSCode Python智能感知一起工作的方法。

遵循code example插件运算符的导入路径可以是:

from airflow.operators import MyPluginOperator

VSCode无法解决此导入,因为它仅在运行时通过airflow插件系统有效。

有什么方法可以配置VSCode来解决此导入吗?

2 个答案:

答案 0 :(得分:0)

Airflow通过在UserEntity userEntity = new UserEntity(); BeanUtils.copyProperties(userDto, userEntity); userEntity.setEncryptedPassword("test"); userEntity.setEmailVerificationToken("testing"); userEntity.setUserId("testId"); 文件夹中搜索airflow/plugins子类并在运行时将它们添加到AirflowPlugin命名空间中来动态加载插件。以下是airflow中的代码:

airflow/operators/__init__.py

VS Code无法处理。甚至像PyCharm has problems with it这样的“大型” Python IDE。 VS Code不可能知道特定文件夹中的一段代码稍后会在# 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 中进行转换。 “ python.autoComplete.extraPaths”也无济于事。您只希望有人会在某个地方为Airflow编写VS Code扩展:)

答案 1 :(得分:0)

从 2.0.0 版开始,Airflow 处理插件导入的方式有 changed

<块引用>

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

接下来要考虑的重要事项是 Airflow 将 dags/plugins/config/ 目录添加到 PYTHONPATH env。 source

按照文档中的规范,您可以创建您的 MyCustomOperatorairflow_home/plugins/custom_operator/ 目录中。然后你可以像这样使用它:

from custom_operator.my_custom_operator import MyCustomOperator

with dag:
    sample_custom_task = MyCustomOperator(task_id='sample-task')

到目前为止一切顺利,dag 将运行,但根据我的经验,VSCode IntelliSense 尚无法运行。要使其工作,您需要将路径添加到 /plugins,就像 Airflow 在运行时所做的那样。根据您的设置,有几种方法可以做到这一点。目标是为VSCode正在“使用”的python解释器添加一个额外的路径(确保选择与您的项目相关的解释器)

一个常见的解决方案是使用 env PYTHONPATH 将我们的路径附加到解释器知道的路径上。就我而言,我使用的是虚拟环境,因此按照此 post 中的说明,我创建了一个 .pth 文件,其中包含要添加的路径并在 airflow_home/venv/lib/my_python_version/site-packages/

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

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo airflow_home/plugins > airflow_plugins_example.pth

完成后,重新加载 VSCode(也可以更改为另一个解释器,然后返回),您应该会看到智能感知正常工作。

希望有效!