Airflow运行报ModuleNotFoundError无法找到已安装的自定义包etl_package
根因说明
报错核心原因是Airflow的webserver、scheduler、worker运行进程的Python搜索路径未识别到etl_package的存放路径,和DAG文件夹存放位置无关。Airflow官方模块可正常导入,是因为Airflow进程启动时会自动将自身安装路径加入Python搜索路径,不受DAG存放位置影响。
排查步骤
第一步:验证Airflow运行时的Python环境信息
在你的DAG中添加临时测试任务,打印当前运行环境的解释器路径和搜索路径,运行后查看任务日志确认配置:import sys from airflow.operators.python import PythonOperator def print_env_info(): print("Python解释器路径:", sys.executable) print("Python搜索路径列表:", sys.path) # 加入到你的DAG任务列表中 test_env = PythonOperator( task_id="test_python_env", python_callable=print_env_info )运行该任务后,检查日志中是否包含
C:\Users\username\AppData\Roaming\Python\Python37\site-packages路径,以及当前Python解释器是否和你安装etl_package使用的解释器一致。第二步:检查PYTHONPATH变量生效范围
如果你配置的是用户级别的PYTHONPATH环境变量,Airflow如果是作为系统服务/其他用户身份启动,将无法读取到该变量。请将路径添加到系统级别的PYTHONPATH变量中,修改完成后重启所有Airflow相关进程(webserver、scheduler、worker),环境变量修改后必须重启进程才能生效。第三步:通过Airflow配置文件添加搜索路径
你也可以直接修改airflow.cfg配置文件中的python_path参数,直接指定自定义包的搜索路径:python_path = C:\Users\username\AppData\Roaming\Python\Python37\site-packages多路径可用逗号分隔,修改完成后同样需要重启所有Airflow进程。
第四步:临时验证方案
你可以直接在DAG文件的最开头,手动将路径加入Python搜索路径,快速验证问题:import sys sys.path.append("C:\\Users\\username\\AppData\\Roaming\\Python\\Python37\\site-packages") # 之后再写其他import代码如果添加后不再报错,即可确认是路径未被Airflow进程识别的问题,按前几步配置永久生效即可。
内容的提问来源于stack exchange,提问作者thehungrypanda121

