![](/img/trans.png)
[英]ImportError: No module named bottle — WSGI + python + apache
[英]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.