2017-03-08 36 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']) 
      ] 

也许这是否行得通呢?