【发布时间】:2021-10-13 04:25:12
【问题描述】:
我正在使用 docker-compose 和 Dockerfile 运行 apache Airflow,并且我有以下气流文件夹结构:
dags
example_dag
dag_1.py
pf_utils
__init__.py
setup.py
db.py --> get_primary_keys function
plugins
_init_.py
snowflake_operator.py --> from pf_utils.db import get_primary_keys
我已经从文件夹 utils 创建了一个包,以便能够按照https://airflow.apache.org/docs/apache-airflow/stable/modules_management.html#creating-a-package-in-python 中的说明在 dags 和插件代码中导入它的功能
但是,由于不存在模块,snowflake_operator 文件中的导入失败。我怎样才能让它在雪花操作符文件中工作?
如果我使用docker exec -it airflow_scheduler_1 bash 进入容器,我可以看到包pf_utils 已正确安装,原因有两个:
-
运行
pip show pf_utils向我展示:Name: pf-utils Version: 0.0.0 Summary: UNKNOWN Home-page: UNKNOWN Author: None Author-email: None License: UNKNOWN Location: /home/airflow/.local/lib/python3.6/site-packages Requires: Required-by: -
在家中 (
/opt/airflow),在 python3 控制台中运行import pf_utils不会出错。
但是,如果我从 /opt/airflow 移动到 /opt/airflow/plugins 并在那里启动 python3,导入将引发不存在模块的错误。在工作目录/opt/airflow/plugins 我也尝试过:
from .pf_utils.db import get_primary_keys
import .pf_utils
import ..pf_utils
from ..pf_utils import db
from airflow.pf_utils import db
以上都不行
即使添加行:
import sys
sys.path.append('/opt/airflow/pf_utils')
到snowflake_operator.py文件开头并没有解决问题。
【问题讨论】:
-
你是如何安装
pf_utils包的?尝试在 docker compose 文件中使用_PIP_ADDITIONAL_REQUIREMENTS 或将其添加到您的自定义图像中,如here 所述。
标签: python pip airflow python-module