Ошибка ModuleNotFoundError: нет модуля с именем ‘pymongo’ в Docker и Airflow

#python #mongodb #docker #docker-compose #airflow

#python #mongodb #docker #docker-compose #воздушный поток

Вопрос:

В настоящее время я использую Docker с puckel / Airflow для запуска Airflow Я успешно установил pymongo, но при вызове импорта pymongo по-прежнему не удается найти модуль.

Я добавил приведенные ниже коды в файл Dockerfile над другим запуском перед восстановлением

1-я попытка

RUN pip install pymongo

2-я попытка

RUN pip install pymongo -U

Я собрал их с

docker build --rm -t puckel/docker-airflow .

Pymongo устанавливается успешно, но когда я запускаю веб-сервер с простым импортом баз данных, я все еще получаю ошибку

  File "/usr/local/lib/python3.6/site-packages/airflow/contrib/hooks/mongo_hook.py", line 22, in <module>
     from pymongo import MongoClient
 ModuleNotFoundError: No module named 'pymongo'
  

Комментарии:

1. как называется ваша папка?

Ответ №1:

Я решил это, скопировав свой requirements.txt файл в корень.

Фактически в puckel/docker-airflow файле Dockerfile он выполняет точку входа.sh witch pip устанавливает пакеты из /requirements.txt , если файл существует. Итак, мы уверены, что наши пакеты установлены.

Вы можете добавить в Dockerfile :

 COPY ./requirements.txt /requirements.txt
  

Или

в docker-compose.yml добавьте объем в свой контейнер:

 volumes:
  - ./requirements.txt:/requirements.txt
  

Ответ №2:

Я столкнулся с этим же симптомом. Я исправил это, добавив amp;amp; pip install pymongo в puckel/airflow:Dockerfile рядом с другими pip install командами и перестроив образ.

Вот что я пробовал, но это не устранило проблему:

  1. Добавление pymongo в requirements.txt и монтирование файла. Я проверил, что модуль был загружен, как ожидалось, через сообщения журнала при docker-compose запуске и путем подключения к моим экземплярам worker и веб-сервера и увидел, что модуль был доступен в среде Python с помощью help("modules") , но модуль был недоступен для моих баз данных Airflow
  2. Добавление --build-arg PYTHON_DEPS="pymongo" в качестве параметра в мою docker build команду. (Примечание: для модулей, отличных от pymongo этого шага, исправлены module not found ошибки, но не для pymongo . На самом деле, я не видел никакой записи в журнале об pymongo установке во время docker build , когда я устанавливал это)

Ответ №3:

Не могли бы вы попробовать

 RUN pip3 install pymongo
  

и отчитаться. Это может произойти, если у вас несколько версий Python. pip3 удостоверится, что вы устанавливаете модуль для Python 3.x.

Комментарии:

1. Только что запускался с pip3, и это не сработало : (Веб-сервер все еще запущен, однако, базы данных импортированы монго в выдает ошибки.

Ответ №4:

Когда вы создавали образ puckel / Airflow Docker, вы добавляли mongo to AIRFLOW_DEPS в свои аргументы сборки?

например docker build --rm --build-arg AIRFLOW_DEPS="mongo" -t puckel/docker-airflow .

Ответ №5:

У меня есть аналогичный опыт для mysql hook и решен.

Мой опыт заключается в том, чтобы сначала проверить, можно ли импортировать модуль в чистую среду python.

Некоторое время установленный вами пакет не соответствует тому, который требуется airflow.

В вашем случае вы можете проверить на следующем шаге. 1. перейдите в контейнер docker docker exec -it /bin / bash 2. запустите python, предполагая, что вы используете python версии 3.X python 3. проверьте модуль в среде python, импортируйте pymonggo # другой тестовый скрипт, если хотите проверить. если вы столкнулись с ошибкой, пожалуйста, сначала решите ее в среде python, а затем вернитесь к airflow.

======================================================= Я только что дважды проверил исходный код airflow на github и понял, что mongo db не является подключением по умолчанию в исходном коде.

В этом случае вам может потребоваться перейти к пакету pymongo, чтобы изучить, как его установить и скомпилировать, и связанные с ним зависимости.