Python CloudML的正确模块封装

Python CloudML的正确模块封装,python,tensorflow,google-cloud-ml,Python,Tensorflow,Google Cloud Ml,我有一个Python项目,其结构如下: 项目/内容包括: 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','*.y

我有一个Python项目,其结构如下:

  • 项目/内容包括:
  • 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='a@b.com',
  packages=find_packages(),
  include_package_data=True,
  package_data=package_data,
  zip_safe=False)
当我尝试“pip install project/”时,它在我的电脑上运行良好,我在[…]/python2.7/site-packages/project/conf中看到conf/文件夹和所有*.yaml文件/ 当我在本地运行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文件。
有什么想法吗?

您可以尝试使用以下方式手动打包:

python setup.py sdist
然后将生成的.tar.gz暂存到云存储桶中

完成此操作后,您应该能够使用gcloud命令上的--package uris标志(向服务提交作业时)引用预暂存包


查看这是否有助于解除阻止。

您可以尝试使用以下方式手动打包:

python setup.py sdist
然后将生成的.tar.gz暂存到云存储桶中

完成此操作后,您应该能够使用gcloud命令上的--package uris标志(向服务提交作业时)引用预暂存包


看看这是否有助于解除您的封锁。

另一种尝试是不要使用
包数据和
包含包数据,而是使用
数据文件。。。至少这是我在自己的场景中使用过的,在这个场景中,我需要在源发行版中有额外的数据文件

比如:

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

也许这会奏效?

另一种尝试是不要使用
包数据和
包含包数据,而是使用
数据文件。。。至少这是我在自己的场景中使用过的,在这个场景中,我需要在源发行版中有额外的数据文件

比如:

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

也许这会奏效?

出于一些奇怪的原因,当我将“include\u package\u data”设置为False时,效果很好!!!出于一些奇怪的原因,当我将“include_package_data”设置为False时,它可以正常工作!!!我认为应该行得通。我使用了
python setup.py sdist
,它生成了我需要的东西(包中包含了*.yaml文件)。但为了让它工作,我必须将
include\u package\u data
设置为False。这似乎不对,但它解决了我的问题…我认为它应该起作用。我使用了
python setup.py sdist
,它生成了我需要的东西(包中包含了*.yaml文件)。但为了让它工作,我必须将
include\u package\u data
设置为False。这似乎不对,但它解决了我的问题。。。