如何将python软件包安装到Google Dataflow上并将其导入管道中?

时间:2018-09-08 21:39:57

标签: python google-cloud-dataflow

我的文件夹结构如下:

Project/
 --Pipeline.py
 --setup.py
 --dist/
  --ResumeParserDependencies-0.1.tar.gz
 --Dependencies/
        --Module1.py
        --Module2.py
        --Module3.py

我的setup.py文件如下所示:

from setuptools import setup, find_packages

setup(name='ResumeParserDependencies',
  version='0.1',
  description='Dependencies',
  install_requires=[
   'google-cloud-storage==1.11.0',
   'requests==2.19.1',
   'urllib3==1.23'
    ],
  packages = ['Dependencies']
 )

我使用setup.py文件使用“ python setup.py sdist”创建tar.gz文件。 tar文件位于dist文件夹中,名为ResumeParserDependencies-0.1.tar.gz。然后,我指定了

setup_options.extra_packages = ['./dist/ResumeParserDependencies-0.1.tar.gz'] in my pipeline options.

但是,一旦我在Dataflow上运行管道,就会出现错误“没有名为ResumeParserDependencies的模块”。如果我在本地使用“ pip install ResumeParserDependencies-0.1.tar.gz”,则该软件包会安装,并且可以使用“ pip Frozen”看到它。


将包加载到Dataflow时我缺少什么?

2 个答案:

答案 0 :(得分:4)

我更改了文件夹结构并使其正常工作:

Project/
--Pipeline.py
--setup.py
--Module1/
    --__init__.py
--Module2/
    --__init__.py
--Module3/
    --__init__.py

setup.py文件现在如下所示:     从setuptools导入设置,find_packages

setup(name='ResumeParserDependencies',
  version='0.1',
  description='Dependencies',
  install_requires=[
   'google-cloud-storage==1.11.0',
   'urllib3==1.23'
    ],
  packages = find_packages()
 )

在管道中,我指定了:

setup_options.setup_file = './setup.py'

我不需要:

setup_options.extra_packages = ['./dist/ResumeParserDependencies-0.1.tar.gz']

参考: find_packages doesn't find my Python file

答案 1 :(得分:0)

通常,发生此问题的原因是SDK或Worker依赖项的版本不匹配。要解决您的问题,请check your Dataflow versionWorker Dependencies for the SDK version来验证您是否正在运行兼容版本。