如何将 python 包安装到 Google Dataflow 并将其导入我的管道?

Mel*_*Guo 5 python google-cloud-dataflow

我的文件夹结构如下:

Project/
 --Pipeline.py
 --setup.py
 --dist/
  --ResumeParserDependencies-0.1.tar.gz
 --Dependencies/
        --Module1.py
        --Module2.py
        --Module3.py
Run Code Online (Sandbox Code Playgroud)

我的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']
 )
Run Code Online (Sandbox Code Playgroud)

我使用 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.
Run Code Online (Sandbox Code Playgroud)

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


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

Mel*_*Guo 11

我改变了我的文件夹结构并让它工作:

Project/
--Pipeline.py
--setup.py
--Module1/
    --__init__.py
--Module2/
    --__init__.py
--Module3/
    --__init__.py
Run Code Online (Sandbox Code Playgroud)

setup.py 文件现在看起来像这样: from setuptools import setup, find_packages

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

在我的管道中,我指定了:

setup_options.setup_file = './setup.py'
Run Code Online (Sandbox Code Playgroud)

我不需要:

setup_options.extra_packages = ['./dist/ResumeParserDependencies-0.1.tar.gz']
Run Code Online (Sandbox Code Playgroud)

参考: find_packages 没有找到我的 Python 文件

  • 哦等等,你确实需要 find_packages() 因为你的管道引用 `Module1` 等(从技术上讲,这些是包而不是模块,因为你在那里有 __init__.py 文件:)) (2认同)