我正在尝试找到一种使Airflow Plugins与VSCode Python智能感知一起工作的方法。
遵循code example插件运算符的导入路径可以是:
from airflow.operators import MyPluginOperator
VSCode无法解决此导入,因为它仅在运行时通过airflow插件系统有效。
有什么方法可以配置VSCode来解决此导入吗?
答案 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}.
接下来要考虑的重要事项是 Airflow 将 dags/、plugins/ 和 config/ 目录添加到 PYTHONPATH env。 source
按照文档中的规范,您可以创建您的 MyCustomOperator
在 airflow_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(也可以更改为另一个解释器,然后返回),您应该会看到智能感知正常工作。
希望有效!