我有我要在Apache梁管道與數據流轉輪內使用本地Python包。 我試圖按照文檔中提供的說明:https://beam.apache.org/documentation/sdks/python-pipeline-dependencies/(部分本地或非PyPI將依賴),但沒有成功。阿帕奇梁Python的依賴
我的包具有以下結構:
my_common
├── __init__.py
└── shared
├── __init__.py
└── something.py
用含有something.py
文件:
def hello_world():
return "Hello"
包裝用python setup.py sdist
命令構建。現在
,我有阿帕奇梁管道配置如下:
pipeline_parameters = [
'--project', project_id,
'--staging_location', staging_location,
'--temp_location', temp_location,
'--max_num_workers', 1,
"--extra_package", "/absolute/path/to/my/package/my_common-1.0.tar.gz"
]
p = beam.Pipeline("DataFlowRunner", argv=pipeline_parameters)
# rest of the pipeline definition
之一管線地圖功能具有下面的代碼,它使用我的模塊:
from my_common.shared import something
logging.info(something.hello_world())
,當我安排每次此流水線到DataFlow,我得到以下錯誤:
ImportError: No module named shared
有趣的部分是th當我在另一個環境中安裝這個包(來自.tar.gz)文件時,我可以毫無問題地導入和運行它的功能。在我看來,DataFlow在運行管道之前不會安裝軟件包。
什麼是管理和谷歌的數據流部署Python的依賴關係的正確方法是什麼?
//更新: 在https://stackoverflow.com/a/46605344/1955346描述的解決方案是不是足夠我用的情況下,因爲我需要我的地方包在完全不同的文件夾,並setup.py
我的管道已經有一些內容(我不能使用在那裏建議的外部包的setup.py)。
問題的目錄是,我已經有'''與我的管道定義了一些自定義命令setup.py'''。有沒有其他方法? '''extra_packages'''的目的是什麼呢? –
我一直與梁現在經歷過了一個月,連我第一次嘗試使用'特packages'參數,但即使我沒有運氣吧。文檔不清楚它的工作原理。 – Anuj
也可以在設置文件中提供'packages'並自定義命令。我沒有看到任何理由,它會影響自定義命令 – Anuj