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