You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow模块导入报错求助:找不到scripts.marketing_functions模块

解决ModuleNotFoundError: No module named 'scripts.marketing_functions'问题

问题现象

执行脚本时触发如下错误:

ModuleNotFoundError: No module named 'scripts.marketing_functions'

直接在控制台手动执行脚本也会出现相同报错。

项目结构

scripts/
├──__init__.py
├── marketing_functions.py
└── marketing/
    └── some_script.py  # 依赖marketing_functions.py
dags/
    └── my_dag.py # 通过BashOperator调用some_script.py

环境配置

  1. 目录部署位置:
    • scripts 目录:/opt/bitnami/airflow/scripts
    • dags 目录:/opt/bitnami/airflow/dags
  2. PYTHONPATH已配置/opt/bitnami/airflow/scripts,通过airflow info可验证:
Paths info
airflow_home    | /opt/bitnami/airflow                                                                                                                                                                                 
system_path     | /opt/bitnami/common/bin:/opt/bitnami/python/bin:/opt/bitnami/postgresql/bin:/opt/bitnami/airflow/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin                               
python_path     | /opt/bitnami/python/bin:/opt/bitnami/airflow/scripts:/opt/bitnami/python/lib/python39.zip:/opt/bitnami/python/lib/python3.9:/opt/bitnami/python/lib/python3.9/lib-dynload:/opt/bitnami/python/lib/pyt
                | hon3.9/site-packages:/opt/bitnami/python/lib/python3.9/site-packages/setuptools-63.4.3-py3.9.egg:/opt/bitnami/python/lib/python3.9/site-packages/pip-21.3.1-py3.9.egg:/opt/bitnami/airflow/dags:/opt/
                | bitnami/airflow/config:/opt/bitnami/airflow/plugins                                                                                                                                                  
airflow_on_path | True 

控制台验证PYTHONPATH:

I have no name!@0a8ff614c4b8:/$ echo $PYTHONPATH
/opt/bitnami/airflow/scripts

相关代码示例

DAG代码(my_dag.py)

import datetime

from airflow import DAG
from airflow.operators.bash import BashOperator

with DAG(
        dag_id="marketing_some_script",
        start_date=datetime.datetime(2023, 4, 16),
        schedule_interval="30 2 * * *",
) as dag:
    some_script = "/opt/bitnami/airflow/scripts/marketing/some_script.py"

    task_some_script = BashOperator(
        task_id="task_some_report",
        bash_command=f"python {some_script}"
    )
task_some_script

脚本导入部分(some_script.py)

from datetime import datetime

import gspread
import pandas as pd
from airflow.providers.postgres.hooks.postgres import PostgresHook
from oauth2client.service_account import ServiceAccountCredentials

from scripts.marketing_functions import *

解决方案

方案1:修改导入语句

由于/opt/bitnami/airflow/scripts已在PYTHONPATH中,Python会直接搜索该目录下的模块,因此将导入语句改为:

from marketing_functions import *

方案2:调整PYTHONPATH层级

将PYTHONPATH改为/opt/bitnami/airflow,而非/opt/bitnami/airflow/scripts。这样Python能识别scripts作为顶层模块,原导入语句from scripts.marketing_functions import *即可正常工作。

方案3:在脚本中手动添加路径

在some_script.py的开头添加以下代码,将项目根目录加入Python搜索路径:

import sys
sys.path.append('/opt/bitnami/airflow')

之后保留原导入语句即可。


内容的提问来源于stack exchange,提问作者Александр Шаповалов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:41:26