2017-10-06 80 views
0

我有我要在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)。

回答

0

而不是通過extra-packages提供它的使用提供它setup_file

使用setuptools來定義setup_file,它看起來有點如下

from setuptools import setup 

setup(
    name="dataflow_pipeline_dependencies", 
    version="1.0.0", 
    author="Marcin Zablocki", 
    author_email="[email protected]", 
    description=("Custom python utils needed for dataflow cloud runner"), 
    packages=[ 
     'my_common' 
     ] 
) 

,並使用--setup_file參數中,如下

pipeline_parameters = [ 
    '--project', project_id, 
    '--staging_location', staging_location, 
    '--temp_location', temp_location, 
    '--max_num_workers', 1, 
    "--setup_file", "/absolute/path/to/your/package/my_common" 
] 


p = beam.Pipeline("DataFlowRunner", argv=pipeline_parameters) 
# rest of the pipeline definition 

其中/absolute/path/to/your/package/my_common路徑到存儲包

+0

問題的目錄是,我已經有'''與我的管道定義了一些自定義命令setup.py'''。有沒有其他方法? '''extra_packages'''的目的是什麼呢? –

+0

我一直與梁現在經歷過了一個月,連我第一次嘗試使用'特packages'參數,但即使我沒有運氣吧。文檔不清楚它的工作原理。 – Anuj

+0

也可以在設置文件中提供'packages'並自定義命令。我沒有看到任何理由,它會影響自定義命令 – Anuj