Python Google Cloud函数-函数加载错误:预期定义函数的main.py文件不';不存在
我正在尝试实现一个基于Git风格存储库中代码的Google云功能。我将代码链接到谷歌云平台的“源代码存储库”,当我将代码复制并粘贴到GCP函数“内联编辑器”中时,我的函数运行良好。当我切换到“云源存储库”选项时,我可以看出它正在从该存储库读取数据;在此之前,我还处理过其他错误。但是,在解决之前/其他问题后,现在我发现以下错误:Python Google Cloud函数-函数加载错误:预期定义函数的main.py文件不';不存在,python,git,google-cloud-platform,google-cloud-functions,Python,Git,Google Cloud Platform,Google Cloud Functions,我正在尝试实现一个基于Git风格存储库中代码的Google云功能。我将代码链接到谷歌云平台的“源代码存储库”,当我将代码复制并粘贴到GCP函数“内联编辑器”中时,我的函数运行良好。当我切换到“云源存储库”选项时,我可以看出它正在从该存储库读取数据;在此之前,我还处理过其他错误。但是,在解决之前/其他问题后,现在我发现以下错误: 函数加载错误:需要定义函数的main.py文件不存在 我的文件的结构与此类似,根目录中有main.py: . ├── package | ├──script1.py
函数加载错误:需要定义函数的main.py文件不存在
我的文件的结构与此类似,根目录中有main.py
:
.
├── package
| ├──script1.py
| └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt
从requirements.txt
(之前的一些错误来自于该读取过程)中读取很好,但是为什么不从main.py
读取呢?我在GCP函数中的设置如下所示:
我曾尝试将main.py移动到项目中的另一个目录,并将“带有源代码的目录”设置到该目录,但这给了我一个错误,即找不到该目录。有什么建设性的想法吗
编辑/补充信息
我使用的是存储库中的分支,而不是
master
,我使用的是Google Cloud Pubsub-topic触发器来触发此函数。在推送新提交后是否重新部署此函数?您需要执行以下操作:
gcloud functions deploy NAME \
--source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/master/paths/SOURCE \
TRIGGER
有关更多详细信息,请参阅。如果您正试图使用GCS bucket或文件上载功能上载代码zip,请确保不要压缩包含代码的文件夹,而只压缩代码文件
CodeFolder
├── package
| ├──script1.py
| └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt
不要从code文件夹
创建Zip文件
相反,从
main.py
和requirement.txt
和package
创建一个zip文件
我有一个类似的问题(可能是相同的?)。我所有的文件都是以下格式的:
{
"name": "test",
"description": "testingThings",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "ABCDEFG",
"engines": {
"node": "8"
},
"scripts": {
"start": "firebase serve --only functions:test",
"deploy": "firebase deploy --only functions:test"
},
"dependencies": {
"google-cloud-storage": "",
"google-cloud-firestore": "",
}
}
我相信他们会用它来部署谷歌云功能,因此如果没有它,他们会崩溃。如果尽管有其他答案,您仍然无法使其正常工作,我最终通过执行以下操作来消除此错误:
- 确保文件的路径正确(尤其是json文件,如果您从中加载凭据,请注意相对路径)
- 检查你的requirements.txt文件:我使用pipreqs自动生成它,但它出现了一些错误(例如,对于像google cloud任务这样的模块,“\u0”而不是“-”),我建议你自己根据导入内容编写requirements.txt
我希望这会有所帮助。您的云函数在到达您分配的入口点函数之前是否正在执行任何操作?如果发生任何未处理的异常,GCF将不会到达入口点函数并抛出此错误。例如:
class SomeClass:
def __init__(self):
raise ValueError
err = SomeClass()
def main(event, context):
pass
将引发相同的错误:
函数加载错误:预期用于定义函数的main.py文件不存在
。这是因为从未到达您的入口点函数。请查看在定义函数之前运行的代码,您可能会发现一些错误。一切看起来都正常。您如何部署此函数n在进行更改后?我推到Bitbucket,它与Google的“源存储库”同步。我已经验证了同步发生得非常快(约1-2秒)。我刚刚刷新了Google的“源存储库”页面以确保…仍不工作。出于某种原因,将main.py
移动到PACKAGE
文件夹中,然后使用以下命令工作,而其他选项不起作用:gcloud functions deploy NAME--sourcehttps://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/BRANCH_NAME/paths/PACKAGE/--trigger topic topic
知道我为什么不能使用基于web的GUI为GCP函数成功设置此函数吗?“相反,从main.py和requirement.txt和package创建一个zip文件。”-谢谢!