首页 > 解决方案 > GCP DataflowRunner 导入错误

问题描述

使用选项 DirectRunner 时代码正在运行。但是在将其切换到 DataflowRunner 时出现导入错误。找不到lxml模块是这个原因。尝试将 setuptools 代码与主代码一起使用时,它仍然无法正常工作(--setup_file setup.py)。

setuptools.setup(
    name='lxml',
    version='4.2.5',
    install_requires=[],
    packages= setuptools.find_packages(),
)

错误:ImportError:没有名为 lxml 的模块 [运行“运行查询”时]

有什么帮助/建议可以克服这个错误吗?谢谢。

标签: pythongoogle-cloud-platformapache-beam

解决方案


name你传递给函数的setuptools.setup你的包的名字,它的依赖应该在参数中指定install_requires。我想它适用于,DirectRunner因为该软件包已安装在您的本地计算机上。

Beam juliaset示例提供了一个示例 setup.py 文件:

REQUIRED_PACKAGES = ['numpy']
setuptools.setup(
    name='juliaset', # this is their package name
    version='0.0.1',
    description='Julia set workflow package.',
    install_requires=REQUIRED_PACKAGES,
    ...)

PyPI 依赖项

如果lxml是您唯一的依赖项,或者您的所有依赖项都在 PyPI 上,您应该能够使用更简单的 requirements.txt 文件。一般来说,setup.py 方法需要更多的样板文件。

要使用 requirements.txt,请冻结您的依赖项:

pip freeze > requirements.txt

并将 requirements.txt 文件传递​​到您的管道:

--requirements_file requirements.txt

另请参阅 Beam 文档页面,了解 Python 的各种依赖模式


推荐阅读