#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
командами и перестроив образ.
Вот что я пробовал, но это не устранило проблему:
- Добавление
pymongo
вrequirements.txt
и монтирование файла. Я проверил, что модуль был загружен, как ожидалось, через сообщения журнала приdocker-compose
запуске и путем подключения к моим экземплярам worker и веб-сервера и увидел, что модуль был доступен в среде Python с помощьюhelp("modules")
, но модуль был недоступен для моих баз данных Airflow - Добавление
--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, чтобы изучить, как его установить и скомпилировать, и связанные с ним зависимости.