【问题标题】:Airflow Docker - No module named 'pyodbc'Airflow Docker - 没有名为“pyodbc”的模块
【发布时间】:2021-05-06 02:05:55
【问题描述】:

我有一个 Python 脚本,它使用 Pyodbc 与 SQL Server 一起工作,我正在尝试使用 Airflow DAG 运行此脚本:

auction_task = PythonOperator(
  task_id='auction_etl',
  python_callable=get_auction_data,
  dag=dag
)

get_auction_data 函数在另一个文件中:

import json
import requests
import datetime
import pyodbc
import time

def get_auction_data(config):
    return retrieve_from_api(config)

但我在 UI 中不断收到此错误:

Broken DAG: [/opt/airflow/dags/auctionds/etl/auction_etl.py] Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/opt/airflow/dags/auctionds/etl/auction_etl.py", line 9, in <module>
    import pyodbc
ModuleNotFoundError: No module named 'pyodbc'

Airflow 在 Docker 容器中运行,我尝试在工作容器中手动安装 pyodbc,但没有成功。此外,如果我在工作容器中运行 python 命令并运行“import pyodbc”,它就可以正常工作。我不知道我错过了什么。谢谢!

【问题讨论】:

    标签: python docker airflow pyodbc


    【解决方案1】:

    您需要创建一个添加了 pyodbc 的自定义图像。您可以在https://airflow.apache.org/docs/docker-stack/build.html#how-to-build-your-own-image 中看到一些有关如何执行此操作的示例,包括有关如何添加新 python 包的示例。

    然后,您必须在 docker 部署中使用该自定义映像(无论您部署容器 - 例如可能是 docker 容器或 K8S)。您只需要将您的映像提供给部署,并确保它使用您的新映像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      相关资源
      最近更新 更多