我的Python项目结构如下:
这是我的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中看到包含所有* .yaml文件的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 :(得分:0)
您可以尝试使用以下方式手动打包:
python setup.py sdist
然后将生成的.tar.gz暂存到云存储桶中。
一旦你这样做,你应该能够使用gcloud命令上的--package-uris标志来引用你的预备包(当向服务提交作业时)。
看看是否有助于解锁你。
答案 1 :(得分:0)
要尝试的另一件事是不使用package_data
和include_package_data
,而是使用data_files
...至少这是我在我需要的场景中使用的在源代码发布中包含其他数据文件。
类似的东西:
data_files=[('.', 'conf/*.yaml','*.yaml']),
('project':['conf/*.yaml'])
]
也许这会奏效吗?