ModuleNotFoundError: нет модуля с именем 'pymongo' с Docker и Airflow - PullRequest
0 голосов
/ 24 апреля 2019

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

Я добавил следующие коды в Dockerfile над другим RUN перед перестройкой

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'

Ответы [ 4 ]

0 голосов
/ 02 июля 2019

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

Вот что я попробовал, чтобы не решить проблему:

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

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

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

0 голосов
/ 25 апреля 2019

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

Мой опыт - проверить, можно ли сначала импортировать модуль в чистой среде Python.

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

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

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

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

0 голосов
/ 24 апреля 2019

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

RUN pip3 install pymongo

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

...