python - Dataflow/apache beam:管理自定义模块依赖项
问题描述
我有一个使用 apache 光束的 .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())
此处记录了整个设置。
可以在此处找到使用此功能的完整示例。
推荐阅读
- java - 在 android 中过滤掉来自 OEM 的不需要的系统应用程序
- c - 系统调用返回值如何传回用户进程?
- python - 在将 django 表单保存到 mssql 数据库时,将数据类型 nvarchar 转换为数字时出错
- r - 在 R 中检索损坏的越南语字符串变量
- c++ - ESP8266 无需网络即可发送和接收数据
- python - numpy.array() 是抽象数据类型吗?
- jdbc - 尝试检索列名,但通过 IBM JDBC 驱动程序从元数据中获取列索引
- javascript - 如何使用 JS 将特定元素从 for 循环中获取到单独的数组中
- ios - 自更新 xcode 以来,资产的本地化不再有效
- php - 突出显示foreach循环中的最大值和最小值