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'
5 Réponses :
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.
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.
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.
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.
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:
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 --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) 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
quel est le nom de votre dossier?