尝试导入本地模块#222时,worker上出现ModuleNotFoundError

时间:2020-01-16 16:01:29

标签: python dask-kubernetes

当尝试导入本地模块时,worker Pods出现ModuleNotFound错误。我可以在主节点上导入而不会出现问题。主人和工人正在使用完全相同的图像。

图像上的工作目录组织如下:

WorkDIR/
       TheNotebook.ipynb
       MyModule/
                __init__.py
                myModule.py

笔记本类似于

from MyModule import workerFunc

fut = daskClient.submit(workerFunc,*workerArgs);
fut.result()

产生:

/usr/local/lib/python3.6/site-packages/distributed/client.py in result(self, timeout)
    222         if self.status == "error":
    223             typ, exc, tb = result
--> 224             raise exc.with_traceback(tb)
    225         elif self.status == "cancelled":
    226             raise result

/usr/local/lib/python3.6/site-packages/distributed/protocol/pickle.py in loads()
     57 def loads(x):
     58     try:
---> 59         return pickle.loads(x)
     60     except Exception:
     61         logger.info("Failed to deserialize %s", x[:10000], exc_info=True)

ModuleNotFoundError: No module named MyModule

我没有在docker镜像中“安装”模块,我只是假设worker窗格上的工作目录与docker镜像上的WORKDIR相同。这不正确吗?我需要创建一个setup.py并安装MyModule吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

雅各布指导我一个答案。 “ ./”目录未添加到工作程序的路径中。要解决此问题,我只需将以下行添加到我的Dockerfile中。

ENV PYTHONPATH "${PYTHONPATH}:./"

答案 1 :(得分:1)

听起来您在PYTHONPATH上的工作人员上没有设置当前目录。

您需要在Dockerfile中执行以下操作:

ENV PYTHONPATH ".:${PYTHONPATH}"

这将检查当前目录中的模块,然后再检查路径中的其他模块。因此,它也可以用来覆盖已安装的库。

有关更多信息,请参见How do you add a path to PYTHONPATH in a Dockerfile