Google Cloud Function-函数加载错误:预期用于定义函数的文件main.py不存在

时间:2018-09-20 19:49:48

标签: python git google-cloud-functions

我正在尝试实现基于Git样式存储库中代码的Google Cloud功能。我已将代码链接到Google Cloud Platform的“源存储库”,并且将代码复制并粘贴到GCP函数“内联编辑器”中时,我的函数运行正常。当我切换到“ Cloud Source存储库”选项时,我可以知道它正在从该存储库中读取数据。在此之前,我曾尝试过其他错误。但是,在解决先前/其他问题之后,现在出现此错误:

Function load error: File main.py that is expected to define function doesn't exist

我的文件具有类似的结构,其中main.py位于根目录中:

.
├── package
|   ├──script1.py
|   └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt

requirements.txt可以正常读取(某些先前的错误来自该读取过程),但是为什么不从main.py读取呢?我在GCP功能中的设置如下所示:

Google Cloud function edit window screenshot

我试图将main.py移至项目中的另一个目录,并将“带有源代码的目录”设置为该目录,但这给了我一个错误,提示它找不到该目录。有建设性的想法吗?

编辑/其他信息

我正在使用我的存储库中除master以外的分支,并且正在为此功能使用Google Cloud Pubsub主题触发器。

5 个答案:

答案 0 :(得分:3)

您是否在推送新提交后重新部署该功能?您需要执行以下操作:

gcloud functions deploy NAME \
  --source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/master/paths/SOURCE \
  TRIGGER

有关更多详细信息,请参见https://cloud.google.com/functions/docs/deploying/repo

答案 1 :(得分:2)

您的云功能在到达您分配的入口点功能之前是否在做任何事情?如果发生任何未处理的异常,GCF将不会到达入口点函数并抛出此错误。例如:

class SomeClass:
    def __init__(self):
        raise ValueError

err = SomeClass()

def main(event, context):
    pass

将引发相同的错误:Function load error: File main.py that is expected to define function doesn't exist。这是因为您的切入点功能永远不会到达。在定义函数之前,请查看运行的代码,您可能会发现一些问题。

答案 2 :(得分:1)

我遇到了类似(可能相同)的问题。我发生的事情是我所有的文件都采用以下格式:

  1. [zip文件名] /main.py
  2. [zip文件名/ [etc。]

并且错误不断说找不到主目录。我猜这是因为它有一个父文件夹。在看了一下父母之后,我确定这不是问题。

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

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": "",
  }
}

我相信他们会使用它来部署Google云功能,因此如果没有它,它们就会崩溃。

答案 3 :(得分:0)

如果您尝试使用GCS存储桶或文件上传功能上载代码zip,请确保您不压缩包含代码而仅包含代码文件的文件夹。

CodeFolder
├── package
|   ├──script1.py
|   └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt

不要不要CodeFolder创建一个Zip文件。

相反,请从main.pyrequirement.txtpackage创建一个zip文件。

Source

答案 4 :(得分:0)

如果尽管有其他答案,您仍然无法使它工作,我终于可以通过执行以下操作来摆脱此错误:

  • 确保文件的路径是正确的(尤其是json文件(如果您要从文件中加载凭据,请注意相对路径))
  • 检查您的 requirements.txt 文件:我正在使用pipreqs自动生成该文件,但是却出现了一些错误(例如,对于google-cloud-tasks等模块,是“ _”而不是“-”) 。我建议您根据导入内容自行编写requirements.txt。

我希望这会有所帮助。