我是新手,而且我的气流DAG有问题,它在我的包中导入模块.

Broken DAG: [/opt/airflow/dags/foo_export/util.py] Traceback (most recent call last):   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed   File "/opt/airflow/dags/foo_export/util.py", line 12, in <module>     from .constants import ERROR_LOG ImportError: attempted relative import with no known parent package

我使用的是Python3.9.18.

我的项目/DAG目录:

airflow
├── dags
│   ├── foo_export
│       ├── __init__.py
│       ├── util.py
│       └── config.py
│       └── export.py
│       └── dags.py
│       └── constants.py
├── airflow.cfg
├── logs
├── plugins

Util.py的代码片段:

import io
import logging
from contextlib import contextmanager
from datetime import datetime

from airflow.models import TaskInstance

from .constants import ERROR_LOG, PUBLICATION_DATE
....

Constants.py的代码片段:

PUBLICATION_DATE = "publication_date"
ERROR_LOG = "error_log"

奇怪的是:此模块以前在2.2.2版的Airflow上工作,没有 destruct 任何DAG.此问题仅在更新到2.7.2版后才会出现

根据https://airflow.apache.org/docs/apache-airflow/2.7.2/installation/prerequisites.html,我使用的是一个也已经测试过的Python版本.

推荐答案

Modules Management个文档部分中,它说:

切勿使用在Python3中添加的相对导入(以.开头).这很容易在my_dag1.py中执行类似的操作:

from .base_dag import BaseDag  # NEVER DO THAT!!!!

您应该使用完整路径导入此类共享DAG(从添加到PYTHONPATH的目录开始)

在您的情况下,您-as dags文件夹位于PYTHONPATH下,应该具有:

from foo_export.constants import ERROR_LOG, PUBLICATION_DATE

Python相关问答推荐

将numpy矩阵映射到字符串矩阵

使用图片生成PDF Django rest框架

如何终止带有队列的Python进程?+ 队列大小的错误?

Python无法在已导入的目录中看到新模块

从管道将Python应用程序部署到Azure Web应用程序,不包括需求包

如何防止Plotly在输出到PDF时减少行中的点数?

难以在Manim中正确定位对象

Mistral模型为不同的输入文本生成相同的嵌入

如何使用数组的最小条目拆分数组

Telethon加入私有频道

Python,Fitting into a System of Equations

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

对象的`__call__`方法的setattr在Python中不起作用'

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

如何在Python中找到线性依赖mod 2

如何从需要点击/切换的网页中提取表格?

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

如何在验证文本列表时使正则表达式无序?

pytest、xdist和共享生成的文件依赖项