Почему docker -композит python не найден модуль для оператора воздушного потока - PullRequest
1 голос
/ 03 февраля 2020

Я работаю над тестами для docker -airflow postgres etl. Моя структура проекта в настоящее время выглядит следующим образом:

docker-airflow
|
├── Dockerfile
├── __init__.py
├── dags
│   ├── __init__.py
│   ├── pandas_etl.py
│   └── tuto.py
├── docker-compose.yml
├── operators
    ├── __init__.py
    └── pandas_etl_over_postgres_operator.py

При импорте моего pandas_etl_over_postgres_operator.py в pandas_etl.py я получаю сообщение об ошибке, что модуль не найден.

Код импорта pandas_etl.py:


from operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator

Я пробовал следующие две альтернативы, они также дают одинаковую ошибку.

from .operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator

и

from ..operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator

Локально импорт работает нормально, но при сборке и запуске с использованием docker -compose происходит сбой.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Я думаю, это потому, что вам нужно поместить свой оператор в каталог плагинов и смонтировать его в контейнер. Ознакомьтесь с документацией Puckle относительно плагинов здесь . Вы также можете увидеть и изменить, где ваш конкретный экземпляр воздушного потока ищет плагины, проверив файл конфигурации здесь

0 голосов
/ 03 февраля 2020

Обратите внимание, что для воздушного потока по умолчанию [core]> dags_folder будет иметь значение /usr/local/airflow/dags, означающее, что воздушный поток будет искать разрывы на пути /usr/local/airflow/dags.

В результате весь ваш код dags должен быть внутри этой папки, и, следовательно, вот несколько вещей, которые вам нужно изменить, чтобы ваш код работал:

  • В docker-compose.yml файле:
- ./dags:/usr/local/airflow/dags/dags
- ./logs:/usr/local/airflow/dags/logs
- ./operators:/usr/local/airflow/dags/operators
  • В pandas_etl.py файле:
from operators.pandas_etl_over_postgres_operator import PandasETLOverPostgresOperator

Надеюсь, это поможет!

...