1

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

  • 项目/包含:
  • 设置.py;project/ 内部 project/ 文件夹包含一个init .py 空文件、带有子模块的文件夹、一个仅包含 .yaml 文件(例如 foo.yaml)的 conf/ 文件夹和一个 s_main.py 脚本(我的主要入口点)

这是我的 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/”时,它在我的 PC 上运行良好,我在 [...]/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 文件。任何想法?

4

2 回答 2

0

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

python setup.py sdist

然后将生成的 .tar.gz 暂存到 Cloud Storage 存储桶中。

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

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

于 2017-03-14T08:36:13.087 回答
0

要尝试的另一件事是不使用package_dataand include_package_data,而是使用data_files... 至少这是我在自己的场景中使用的,我需要在源分发中拥有其他数据文件。

就像是:

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

也许这会奏效?

于 2017-03-16T14:48:51.537 回答