ModuleNotFoundError: нет модуля с именем «снежинка» в Apache Airflow DAG, несмотря на то, что он включен в файл requirements.txt

Я уже некоторое время борюсь с проблемой в моей DAG Apache Airflow. Я пытаюсь использовать модуль snowflake-connector-python в своей DAG, и он включен в мой файл requirements.txt. Однако, когда я пытаюсь запустить DAG, я продолжаю получать следующее сообщение об ошибке:

`Broken DAG: [/usr/local/airflow/dags/my_dag.py] Traceback (most recent call last):`
`File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed`
`File "/usr/local/airflow/dags/my_dag.py", line 12, in <module>`
`from snowflake.connector.pandas_tools import pd_writer`
`ModuleNotFoundError: No module named 'snowflake'`

Я пробовал все, что мог придумать, в том числе:

Проверка того, что модуль включен в файл requirements.txt и что файл правильно отформатирован Перезапуск планировщика Airflow и веб-сервера Очистка кеша Airflow DAG Проверка того, что используется правильная среда Python Установка модуля с помощью pip в правильной среде Несмотря на все эти усилия, сообщение об ошибке сохраняется. Есть ли у кого-нибудь другие предложения по решению этой проблемы? Буду очень признателен за любую помощь или совет. Спасибо.

Я пробовал все и не могу найти решение`

Есть ли шанс, что вы запускаете Airflow за пределами вашей виртуальной среды, где установлен пакет?

kakou 19.04.2023 09:53

это в мваа? Вы загрузили файл requirements.txt в s3? Как выглядит ваш файл требований? Вы проверили журналы cloudwatch в разделе airflow-xxxx-Worker и искали требования_установить?

0x26res 19.04.2023 10:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
103
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

MWAA — хитрый зверь, надеюсь, это поможет:

  • Сначала проверьте группу журналов WebServer в CloudWatch, есть отдельный поток журналов requirements_install, который точно скажет вам, что установлено во время запуска службы. Там вы найдете ошибки.

  • Это плохо документировано, но если вы настроите частный веб-сервер MWAA, у него не будет доступа к Интернету даже для загрузки пакетов. Решение состоит в том, чтобы установить пакеты из requirements.txt в plugins.zip и загрузить их в корзину, которую использует MWAA.

  • Также обязательно следуйте рекомендациям по MWAA:

https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags-dependencies.html

https://docs.aws.amazon.com/mwaa/latest/userguide/best-practices-dependencies.html#best-practices-dependencies-python-wheels-s3

Здравствуйте, Яцек Штандера, я не смог найти первые инструкции, которые вы сказали в своем ответе. Нет потока журнала моего облачного наблюдения, может мне помочь?

Nyk Casseano 20.04.2023 18:59

Если вы не настроили ведение журнала, я бы включил их немедленно. Вот как это сделать: docs.aws.amazon.com/mwaa/latest/userguide/…

Jacek Sztandera 21.04.2023 19:50
Ответ принят как подходящий

Внесение изменений в файл requirements.txt может оказаться сложной задачей, поэтому я всегда рекомендую разработчикам сначала протестировать его с помощью mwaa-local-runner. Используя этот проект, вы можете использовать тестовые требования ./mwaa-local-env для проверки любых изменений локально, прежде чем вы отправите их в свою среду MWAA.

Если у вас возникли проблемы, их устранение локально намного проще и обычно (по моему опыту) приводит вас к выяснению того, что вам нужно изменить.

Обычно, когда мне нужно внести изменения в файл requirements.txt, я делаю следующее:

  • Я беру копию ограничений для используемой мной версии MWAA (вы увидите это в файле requirements.txt для mwaa-local-runner) и называю это как-то вроде updated-constraints.txt.
  • Я обновляю это, чтобы обновить любые закрепленные версии, которые я, возможно, захочу использовать (например, если я хочу иметь возможность использовать более позднюю версию пакета провайдера Amazon)
  • Я развертываю это в своей папке S3 Dags
  • В моем файле requirements.txt, который я настраиваю в среде MWAA, я затем указываю на этот файл ограничений, используя этот
 --constraint "/usr/local/airflow/dags/updated-constraints.txt"

(в приведенном выше примере мой «модифицированный» файл ограничений, который я скопировал в папку S3 Dags, называется updated-constraints.txt

  • Затем я добавляю любые дополнительные библиотеки в файл requirements.txt.
  • Загрузите файл requirements.txt и укажите версию на экране конфигурации среды MWAA (что затем потребует перезагрузки).

Вы можете увидеть, как я сделал это с некоторым кодом - https://github.com/094459/cdk-mwaa-redshift

Другие вопросы по теме