2017-03-08 35 views
1

我有一個Python項目結構如下:適當的模塊包裝CloudML

  • 項目/包含:
  • setup.py;項目/ 內部項目/文件夾包含init .py空文件,具有子模塊的文件夾,僅包含.yaml文件(例如foo.yaml)和s_main.py腳本(我的主入口點)的conf /文件夾

這是我的setup.py文件:

from setuptools import setup, find_packages 

NAME = 'project' 

package_data = {'':['conf/*.yaml','*.yaml'],'project':['conf/*.yaml']} 

if __name__ == '__main__': 

setup(
    name=NAME, 
    version=1.0, 
    description='Foo', 
    author='someone', 
    author_email='[email protected]', 
    packages=find_packages(), 
    include_package_data=True, 
    package_data=package_data, 
    zip_safe=False) 

當我嘗試「點子安裝工程/」它工作在我的電腦很好,我看到在我所有的* .yaml文件的conf /文件夾[/ PHP的]/python2.7/site-packages/project/conf/ 當我在本地運行cloudML時,它也可以。我使用以下命令:

gcloud ml-engine local train \ 
    --package-path=path_to_project_module \ 
    --module-name=project.s_main \ 
    --distributed \ 
    -- \ 
    conf/myConf.yaml \ 
    conf/myParams.yaml 

但是,當我在cloudML上運行它時,它不起作用。我運行下面的命令:

gcloud ml-engine jobs submit training JOB_100 \ 
    --package-path=path_to_project_module \ 
    --module-name=project.s_main \ 
    --staging-bucket=myBucket \ 
    --region=europe-west1 \ 
    --config=mlConfig_file \ 
    -- \ 
    conf/myConf.yaml \ 
    conf/myParams.yaml 

日誌清楚地表明,通過conf /目錄,就從未納入內置封裝,因爲預期的* .yaml文件沒有發現我的運行失敗。 有什麼想法?

+0

由於某些奇怪的原因,當我將'include_package_data'設置爲False時,它工作正常! – ma3oun

回答

0

你可以嘗試使用手動包裝:

python setup.py sdist 

然後分期在雲端存儲所產生的名爲.tar.gz。

一旦你這樣做了,你應該能夠使用gcloud命令中的--package-uris標誌(向服務提交作業時)引用預先制定的軟件包。

看看是否有助於解鎖你。

+0

我認爲它應該工作。我已經使用了'python setup.py sdist',它生成了我所需要的(包中包含* .yaml文件)。但爲了工作,我必須將'include_package_data'設置爲False。這似乎不正確,但它解決了我的問題... – ma3oun

0

的另一件事是嘗試不使用package_datainclude_package_data,而是使用data_files ...至少這是我在我自己的情況下使用了,我需要有一個源代碼分發額外的數據文件。

喜歡的東西:

data_files=[('.', 'conf/*.yaml','*.yaml']), 
      ('project':['conf/*.yaml']) 
      ] 

也許這是否行得通呢?