Xit*_*rum 3 python python-2.7 google-cloud-dataflow apache-beam
摘要:有些本地软件包可以工作,有些则不行
我的梁应用程序的结构:
-setup.py
-app/__init__.py
-app/main.py
-package1/__init__.py
-package1/one.py
-package2/__init__.py
-package2/two.py
-package3/__init__.py
-package3/three.py
Run Code Online (Sandbox Code Playgroud)
在main.py中:
from package1 import one
from package2 import two
from package3 import three
Run Code Online (Sandbox Code Playgroud)
在setup.py中
import setuptools
setuptools.setup(
name='beam',
version='1.0',
install_requires=['apache-beam[gcp]',
'google-cloud==0.34.0',
'google-cloud-bigquery==0.25.0',
'requests==2.19.1',
'google-cloud-storage==1.12.0'
],
packages=setuptools.find_packages(),
)
Run Code Online (Sandbox Code Playgroud)
运行时,通过使用python -m app.main:
使用直接运行程序(本地运行),没问题。
使用 DataflowRunner (发送到 gogole 数据流),我遇到此错误:
apache_beam.runners.dataflow.dataflow_runner.DataflowRuntimeException:数据流管道失败。状态:失败,错误:回溯(最近一次调用):文件“/usr/local/lib/python2.7/dist-packages/dataflow_worker/batchworker.py”,第 642 行,在 do_work work_executor.execute() 文件中“ /usr/local/lib/python2.7/dist-packages/dataflow_worker/executor.py”,第 156 行,执行 op.start() 文件“apache_beam/runners/worker/operations.py”,第 344 行,在 apache_beam .runners.worker.operations.DoOperation.start def start(self):文件“apache_beam/runners/worker/operations.py”,第 345 行,在 apache_beam.runners.worker.operations.DoOperation.start 中,带有 self.scoped_start_state:文件“apache_beam/runners/worker/operations.py”,第 350 行,在 apache_beam.runners.worker.operations.DoOperation.start pickler.loads(self.spec.serialized_fn)) 文件“/usr/local/lib/python2.7 /dist-packages/apache_beam/internal/pickler.py”,第 244 行,加载中返回 dill.loads(s) 文件“/usr/local/lib/python2.7/dist-packages/dill/_dill.py”,第 316 行,在加载中返回 load(file,ignore) 文件“/usr/local/lib/python2.7/dist-packages/dill/_dill.py”,第 304 行,在加载 obj = pik.load() 文件中“ /usr/lib/python2.7/pickle.py”,第 864 行,在加载调度键文件“/usr/lib/python2.7/pickle.py”中,第 1096 行,在 load_global klass = self.find_class(module, name )文件“/usr/local/lib/python2.7/dist-packages/dill/_dill.py”,第 465 行,在 find_class 中返回 StockUnpickler.find_class(self, module, name) 文件“/usr/lib/python2.7” 7/pickle.py”,第 1130 行,在 find_class import (module) 中导入错误:没有名为三的模块
这“有点”令人沮丧,因为我双倍/三倍/...检查这些包之间有什么区别,它们是相同的。Sane__init__.py文件(空,其中没有奇怪或隐藏的字符)。中的相同类型的结构*.py。但出于某种原因,包3就是不愿意合作。
有人有解决这个问题的办法吗?
谢谢。
小智 5
已经过去了快一年了,但我遇到了一个非常相似的问题并且能够解决它,因此为其他偶然发现此页面的人发帖。
就我而言, 没有什么特别的package3.three,它只是恰好是工作人员尝试导入的第一个。事实上,删除package3.three(例如,通过暂时将其内容直接包含在 中main.py)会导致其他模块之一出现相同的错误。
虽然我不完全理解根本原因,但使用文件调用python app/main.py而不是模块调用运行python -m app.main解决了问题。setup.py我猜测模块调用中的打包和隐式打包之间存在一些冲突。