簡體   English   中英

Python Apache Beam ImportError:數據流工作者上沒有名為***的模塊

[英]Python apache beam ImportError: No module named *** on dataflow worker

摘要:一些本地軟件包有效,而有些則無效

我的梁應用程序的結構:

-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

在main.py中:

from package1 import one
from package2 import two
from package3 import three

在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(),
)

運行時,通過使用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.DoOperation.start中以“ self.scoped_start_state”開頭的文件“ apache_beam / runners / worker / operations.py”第345行:File apache_beam.runners.worker.operations.DoOperation.start pickler.loads(self.spec.serialized_fn))文件“ /usr/local/lib/python2.7”中的第350行,“ apache_beam / runners / worker / operations.py” /dist-packages/apache_beam/internal/pickler.py“,第244行,在負載中返回dill.loads文件” /usr/local/lib/python2.7/dist-packages/dill/_dill.py“,第316行,在加載中返回load(file,ignore)File“ /usr/local/lib/python2.7/dist-packages/di 負載obj = pik.load()中第304行的“ ll / _dill.py”行,負載分配密鑰文件“ / usr / lib / python2”中的行“ /usr/lib/python2.7/pickle.py”文件中的行ll / _dill.py”。 7 / pickle.py“,第1096行,在load_global klass = self.find_class(模塊,名稱)文件“ /usr/local/lib/python2.7/dist-packages/dill/_dill.py”,第465行,在find_class返回StockUnpickler.find_class(自身,模塊,名稱),在find_class 導入 (模塊)中的文件“ /usr/lib/python2.7/pickle.py”,行1130 ImportError:沒有名為三個模塊

這有點“令人沮喪”,因為我加倍/三倍/ ...檢查這些軟件包之間的區別是什么,並且它們是相同的。 Sane __init__.py文件(空,其中沒有奇怪或隱藏的字符)。 *.py的結構類型相同。 但是由於某種原因,包裝3只是不想合作。

有人對此問題有解決方案嗎?

謝謝。

已經快一年了,但是我遇到了一個非常相似的問題,並且能夠解決它,因此將其他人絆腳石張貼到此頁面上。

在我的情況下, package3.three沒有什么特別的,它恰好是工作人員嘗試導入的第一個。 實際上,刪除package3.three (例如,通過將其內容直接直接包含在main.py )會導致其他模塊之一發生相同的錯誤。

雖然我不完全了解根本原因,但使用文件調用python app/main.py而不是模塊調用python -m app.main解決此問題。 我猜測setup.py的包裝與模塊調用中的隱式包裝之間存在一些沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM