云功能部署不尊重符号链接

问题描述 投票:0回答:1

正如设计规范所明确的那样,Google Cloud Functions 的源目录预计将包括

main.py
requirements.txt
__init__.py
。可以指定其他本地依赖项(即代码),只要它们的导入位于源目录内,如here所述。这会阻止导入同级或父目录。

在此目录设置中,

main.py
可以
import internal.code_internal
,如果
base/
已添加到PythonPath,则可以
import base.code_sibling
。 Cloud Functions 的限制(根据设计)不允许后者导入,因为只有
functions/f/
的内容才会部署到其服务器。我的问题涉及符号链接的解决方法和使用。

base/
   __init__.py
   code_sibling.py
functions/
   f/
      __init
      main.py
      requirements.txt
      internal/
         __init__.py
         code_internal.py

在传统Python中,可以向

functions/f/
添加一个指向
base/
的符号链接,这样就可以导入
base/
的内容,就好像它们直接位于
functions/f/
目录中一样:在其他目录中话,就好像文件
functions/f/base/code_sibling.py
存在一样。然而,这种改进并没有改变云函数的部署行为:符号链接(似乎被
gcloud functions deploy
忽略了。相反,我发现自己直接将
base/
目录复制到
functions/f/
中,然后部署云函数,然后删除
functions/f/base/
复制的文件。

是否有人能够支持符号链接,或者是否有其他解决方法可以更好地解决这种情况? 谢谢你。

与此

交叉发布到functions-framework-python

python google-cloud-functions symlink functions-framework
1个回答
0
投票

Cloud Functions 使用与本地文件系统不同的文件系统。由于其只读文件系统,它们不支持符号链接或某些文件操作。您可以通过将所需的文件直接复制到 Cloud Function 源目录中来解决此问题。这是您的一个选择。

或者,您可以使用带有 --runtime\_file 标志的

gcloud 函数部署
命令。该标志允许您指定包含配置详细信息的文件。在此文件中,您可以设置 PythonPath 以包含要从中导入的目录。

例如:

gcloud functions deploy my-function --runtime python37 --runtime_file runtime.yaml

runtime.yaml
文件中,您将拥有:

pythonPath:
  - functions/f/base

这告诉 Cloud Functions 在

functions/f/base
目录中搜索导入。选择哪种解决方案取决于您需要导入的文件数量以及它们更改的频率。

更多参考:

Google Cloud Storage 中充当“重定向”或“符号链接”的对象

gcloud 函数运行时列表

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.