gpt4 book ai didi

python-3.x - 从 Cloud Functions 中的父目录或同级目录导入模块?

转载 作者:行者123 更新时间:2023-12-03 16:56:12 24 4
gpt4 key购买 nike

我有一个托管在 Google Cloud Repository 中的存储库结构,对于 Google Cloud Functions,它看起来像这样:

.
module.py
/common
module1.py
module2.py
/cloudfunction1
main.py
requirements.txt
/cloudfunction2
main.py
requirements.txt

每个 cloudfunction 目录都部署为单独的云函数。

我想做的是从公共(public)目录或根目录导入模块,但是使用 sys.path.append('..')方法似乎不起作用。我猜这是因为云功能部署过程只包含main.py所在目录下的文件吧?

我该如何解决这个问题?

最佳答案

如果您发现自己需要修改sys.path或以其他方式导入“超出顶级包”,这通常是 Python 中的代码异味,表明您的项目结构不正确。

在这个 Cloud Functions 示例中,您可以做的一件事是像这样构建您的项目:

.
├── common
│   ├── module1.py
│   └── module2.py
├── main.py
└── requirements.txt

在哪里 main.py包含两个功能:
from common import module1, module2

def cloudfunction1(request):
...

def cloudfunction2(request):
...

您可以直接按名称部署这些功能:
$ gcloud functions deploy cloudfunction1 --runtime python37 --trigger-http
$ gcloud functions deploy cloudfunction2 --runtime python37 --trigger-http

或通过入口点:
$ gcloud functions deploy foo --runtime python37 --entry-point cloudfunction1 --trigger-http
$ gcloud functions deploy bar --runtime python37 --entry-point cloudfunction2 --trigger-http

请注意,这有一些缺点:
  • 您的 requirements.txt文件需要包含两个函数的所有依赖项
  • 如果您对 common 进行更改目录,您需要重新部署这两个函数

  • 也就是说,如果您的函数如此相关以至于它们共享公共(public)代码并且经常需要一起部署,那么更好的选择可能是让它们成为单个 App Engine 应用程序的一部分。 (这仅适用于它们都使用 HTTP 触发器的情况)。

    关于python-3.x - 从 Cloud Functions 中的父目录或同级目录导入模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133267/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com