Python Google Cloud函数-函数加载错误:预期定义函数的main.py文件不';不存在

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

我正在尝试实现一个基于Git风格存储库中代码的Google云功能。我将代码链接到谷歌云平台的“源代码存储库”,当我将代码复制并粘贴到GCP函数“内联编辑器”中时,我的函数运行良好。当我切换到“云源存储库”选项时,我可以看出它正在从该存储库读取数据;在此之前,我还处理过其他错误。但是,在解决之前/其他问题后,现在我发现以下错误:

函数加载错误:需要定义函数的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文件

我有一个类似的问题(可能是相同的?)。我所有的文件都是以下格式的:

  • [zip文件名]/main.py
  • [zip文件名/[etc.]
  • 错误总是说它找不到main。我猜这是因为它有一个父文件夹。在查看压缩到父文件夹一段时间后,我确定这不是问题所在

    我下载了的zip文件,查看了自动生成的dialogflow云函数代码,发现它们有一个“package.json”文件。我只是有一个“requirements.txt”文件。我将package.json文件复制到我的源代码中,编辑了正确的内容,对其进行了压缩,并正确编译了云函数

    package.json看起来像:

    {
      "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文件。”-谢谢!