2
votes

ModuleNotFoundError: Aucun module nommé 'pymongo' avec Docker et Airflow

J'utilise actuellement Docker avec puckel / Airflow pour exécuter Airflow J'ai installé pymongo avec succès mais lors de l'appel de l'importation de pymongo, il ne parvient toujours pas à trouver le module.

J'ai ajouté les codes ci-dessous dans le Dockerfile au-dessus de l'autre RUN avant de reconstruire

1ère tentative

RUN pip install pymongo

2e tentative

RUN pip install pymongo -U

I les a construits avec

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

Pymongo s'installe avec succès mais quand j'exécute le serveur Web avec un importation simple de dags J'obtiens toujours l'erreur

 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 commentaires

quel est le nom de votre dossier?


5 Réponses :


0
votes

Pourriez-vous essayer

RUN pip3 install pymongo

et faire un rapport. Cela peut arriver si vous avez plusieurs versions de Python. pip3 s'assurera que vous installez le module pour Python 3.x.


1 commentaires

Juste exécuté avec pip3 et cela n'a pas fonctionné :( Le serveur Web est toujours en cours d'exécution, cependant, le DAGS est importé mongo dans des erreurs de tir.



0
votes

Lorsque vous avez créé l'image puckel / Airflow Docker, avez-vous ajouté mongo à AIRFLOW_DEPS dans vos arguments de construction?

par exemple docker build --rm --build-arg AIRFLOW_DEPS = "mongo" -t puckel / docker-airflow.


0 commentaires

0
votes

J'ai une expérience similaire pour le hook mysql et résolu.

Mon expérience est de vérifier si le module peut d'abord être importé dans un environnement python pur.

Parfois, le pack que vous avez installé n'est pas le flux d'air souhaité.

Pour votre cas, vous pouvez vous enregistrer à l'étape suivante. 1. sauter dans le conteneur docker docker exec -it / bin / bash 2. lancez python en supposant que vous avez utilisé la version python 3.X python 3. vérifiez le module dans python enviromnet importer pymonggo # autre script de test si vous devez vérifier. si vous faites face à une erreur, veuillez d'abord la résoudre dans l'environnement python, puis revenir au flux d'air.

================================================ ======== J'ai juste vérifié deux fois le code source de Airflow Github et réalisé que mongo db n'est pas le hook par défaut dans le code source original.

Au cas où, vous pourriez avoir besoin d'aller plus loin dans le paquet pymongo pour étudier comment l'installer et le compiler et les dépendances associées.


0 commentaires

0
votes

J'ai rencontré ce même symptôme. Je l'ai corrigé en ajoutant && pip install pymongo \ à puckel / airflow: Dockerfile , près des autres commandes pip install et en reconstruisant l'image. < / p>

Voici ce que j'ai essayé qui n'a pas résolu le problème:

  1. Ajout de pymongo à requirements.txt et montage du fichier. J'ai vérifié que le module était chargé comme prévu via les messages de journal au démarrage de docker-compose et en me connectant à mes instances de travail et de serveur Web et en voyant que le module était disponible dans l'environnement Python à l'aide de l'aide ( "modules") mais le module n'était pas disponible pour mes DAG Airflow
  2. Ajout de --build-arg PYTHON_DEPS = "pymongo" en tant que paramètre à ma commande docker build . (Remarque: pour les modules autres que pymongo , cette étape a corrigé les erreurs module not found , mais pas pour pymongo . En fait, je n'en ai pas vu enregistrement du journal de l'installation de pymongo lors de la build du docker lorsque j'ai défini ceci)

0 commentaires

0
votes

Je l'ai résolu en copiant mon fichier requirements.txt à la racine.

En fait, dans le Dockerfile de puckel / docker-airflow , il exécute entrypoint.sh witch pip installe les packages à partir de /requirements.txt si le fichier existe. Nous sommes donc sûrs que nos packages sont installés.

Vous pouvez ajouter dans le Dockerfile :

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

Ou

dans un docker-compose.yml ajoutez un volume à votre conteneur:

COPY ./requirements.txt /requirements.txt


0 commentaires