ModuleNotFoundError:没有名为'pymongo'的模块,包含Docker和Airflow

问题描述 投票:0回答:3

我正在使用Docker与puckel/Airflow运行Airflow我成功安装了pymongo但是当调用pymongo的导入时,它仍然无法找到模块。

在重建之前,我将下面的代码添加到另一个RUN之上的Dockerfile中

第一次尝试

RUN pip install pymongo

第二次尝试

RUN pip install pymongo -U

我用它建造它们

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

Pymongo确实安装成功,但是当我通过简单的dags导入运行网络服务器时,我仍然得到错误

 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'
python mongodb docker docker-compose airflow
3个回答
0
投票

你能试试吗?

RUN pip3 install pymongo

并报告回来。如果您有多个版本的Python,可能会发生这种情况。 pip3将确保您安装Python 3.x的模块。


0
投票

当您构建puckel / Airflow Docker图像时,是否在构建参数中将mongo添加到AIRFLOW_DEPS

例如docker build --rm --build-arg AIRFLOW_DEPS="mongo" -t puckel/docker-airflow .


0
投票

我有类似的mysql钩子经验并解决了。

我的经验是检查是否可以先在纯python环境中导入模块。

有一段时间,你安装的包不是想要的气流。

对于您的情况,您可以检查以下步骤。 1.跳入docker容器docker exec -it / bin / bash 2.启动python假设你已经使用了python 3.X版python 3.检查python中的模块enviromnet import pymonggo#other test script if if to check。如果您遇到错误,请先在python环境中解决,然后再回到气流。

================================================== =====我只是仔细检查了气流github源代码,并意识到mongo db不是原始源代码中的默认钩子。

在这种情况下,你可能需要进一步研究pymongo包来研究如何安装和编译它以及相关的依赖。


0
投票

我遇到了同样的症状。我通过将&& pip install pymongo \添加到puckel/airflow:Dockerfile,靠近其他pip install命令并重建图像来修复它。

这是我尝试过的没有解决问题的方法:

  1. pymongo添加到requirements.txt并挂载文件。我验证了模块是通过docker-compose启动中的日志消息按预期加载的,并连接到我的worker和webserver实例,并且看到该模块在Python环境中使用help("modules")可用但该模块不可用于我的Airflow DAG
  2. --build-arg PYTHON_DEPS="pymongo"作为参数添加到我的docker build命令中。 (注意:对于pymongo以外的模块,这一步修复了module not found错误,但不适用于pymongo。实际上,当我设置此时,我没有看到pymongo中安装docker build的任何日志记录)
© www.soinside.com 2019 - 2024. All rights reserved.