尝试导入本地模块时 worker 出现 ModuleNotFoundError #222
ModuleNotFoundError on worker when attempting to import local module #222
我在尝试导入本地模块时在 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
我没有 "install" docker 图像中的模块,我只是假设 worker pod 上的工作目录与 docker 上的 WORKDIR 相同图片。这是不正确的吗?我需要创建 setup.py
并安装 MyModule
吗?
谢谢!
Jacob 引导我找到了答案。 “./”目录未添加到工作程序的路径中。为了解决这个问题,我只是将以下行添加到我的 Dockerfile 中。
ENV PYTHONPATH "${PYTHONPATH}:./"
听起来您没有在您的 PYTHONPATH
中为您的工作人员设置当前目录。
您需要在 Dockerfile
:
中执行类似的操作
ENV PYTHONPATH ".:${PYTHONPATH}"
这将在检查路径中的其他模块之前检查当前目录中的模块。因此它也可以用来覆盖已安装的库。
有关详细信息,请参阅 How do you add a path to PYTHONPATH in a Dockerfile。
我在尝试导入本地模块时在 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
我没有 "install" docker 图像中的模块,我只是假设 worker pod 上的工作目录与 docker 上的 WORKDIR 相同图片。这是不正确的吗?我需要创建 setup.py
并安装 MyModule
吗?
谢谢!
Jacob 引导我找到了答案。 “./”目录未添加到工作程序的路径中。为了解决这个问题,我只是将以下行添加到我的 Dockerfile 中。
ENV PYTHONPATH "${PYTHONPATH}:./"
听起来您没有在您的 PYTHONPATH
中为您的工作人员设置当前目录。
您需要在 Dockerfile
:
ENV PYTHONPATH ".:${PYTHONPATH}"
这将在检查路径中的其他模块之前检查当前目录中的模块。因此它也可以用来覆盖已安装的库。
有关详细信息,请参阅 How do you add a path to PYTHONPATH in a Dockerfile。