Python多级包导入本地正常 Airflow运行找不到模块问题咨询
解决Airflow运行时Python跨目录导入模块失败问题
问题根因
你本地运行时的工作目录恰好是comp.py所在的Folder5目录,所以../../能正确解析到Module根目录;但Airflow调度任务时的默认工作目录是Airflow的DAG目录/运行目录,和你项目的目录结构无关,硬编码的相对路径../../解析后指向的是错误路径,自然找不到utils.py模块。
解决方案
不需要手动配置环境变量,只要将comp.py中硬编码添加相对路径的逻辑,替换为基于当前文件位置动态计算项目根目录的绝对路径再添加到sys.path即可,代码如下:
import os import sys # 获取当前comp.py文件所在的Folder5目录的绝对路径 current_dir = os.path.dirname(os.path.abspath(__file__)) # 向上追溯两层得到Module根目录的绝对路径 project_root = os.path.abspath(os.path.join(current_dir, "..", "..")) # 避免重复添加路径 if project_root not in sys.path: # insert(0)优先级更高,防止路径冲突 sys.path.insert(0, project_root) # 之后直接导入即可 from Common.utils import 你要导入的函数名
补充说明
你当前utils.py中基于__file__读取credentials.ini的逻辑是正确的,完全不受运行工作目录影响,不需要修改。
这个方案不管是本地运行,还是Airflow调度运行,都会基于comp.py的实际存储位置定位到项目根目录,不会受运行时工作目录的影响。
内容的提问来源于stack exchange,提问作者Altair21
相关产品推荐
相关产品推荐

