我有一个使用apache Beam的.py管道,该管道导入了另一个模块(.py),这是我的自定义模块。 我有一个像这样的结构:
├── mymain.py
└── myothermodule.py
我这样在mymain.py中导入myothermodule.py:
import myothermodule
当我在DirectRuner
上本地运行时,我没有问题。
但是,当我使用DataflowRunner
在数据流上运行它时,出现错误消息:
ImportError: No module named myothermodule
所以我想知道如果我想在数据流上运行作业时希望找到该模块怎么办?
答案 0 :(得分:3)
在远程运行管道时,还需要使任何依赖项在远程工作器上也可用。
为此,您应该将模块文件放入Python包中,方法是将其放在包含├── mymain.py
├── setup.py
└── othermodules
├── __init__.py
└── myothermodule.py
文件的目录中并创建setup.py。看起来像这样:
from othermodules import myothermodule
并像这样导入它:
--setup_file ./setup.py
然后,您可以使用命令行选项import setuptools
setuptools.setup(packages=setuptools.find_packages())
最小的setup.py文件如下所示:
{{1}}
整个设置记录在here中。
here中提供了使用该示例的完整示例。