如何在来自 requirements.txt 的 Google Cloud Functions 中安装最新的库版本

How to install newest library version in Google Cloud Functions from requirements.txt

部署云函数后,我假设 Google 执行以下等价操作:

pip install -r requirements.txt

假设 requirements.txt 文件包含:

google-cloud-pubsub
google-cloud-storage==1.26.0

由于指定了云存储版本,所有现有和未来的缩放功能实例都将安装该版本。

A gcloud functions deploy ... 将在所有实例上安装 1.26.0 存储库。

但是,假设已经安装了一个 运行 google-cloud-pubsub 版本 1.0.2,最新版本是 1.3.0。

上面的 pip 命令不会加载更新的版本。

相反会有 Requirement already satisfied 响应。现有实例将保留在版本 1.0.2 上,而任何新扩展的实例将拉取 1.3.0。同一云函数实例之间的库版本会不匹配。

  1. 我对这个过程的理解准确吗? GCP 是否相当于 pip install -r requirements.txt
  2. 有没有办法强制云函数在部署期间通过 requirements.txt 或其他方式导入最新版本的库?
  1. Am I understanding this process accurately? Does GCP do an equivalent of pip install -r requirements.txt?

你是对的。在部署时,Cloud Functions 会构建一个映像,将您的依赖项和您的函数安装到其中,并使用它来为您的函数提供服务。

  1. Is there a way to force cloud functions to import the newest version of a library during deployment via requirements.txt or otherwise?

我不确定我是否完全遵循,但您似乎认为重复安装会重复使用相同的图像。他们不会:每次您的源更改和部署时,它都会从头开始并执行上述步骤。

这意味着如果您取消固定您的依赖项(即没有 ==1.26.0),您每次 运行 部署时都将始终获得这些项目的最新兼容版本。

注意:如果您的源文件没有改变,或者如果您只是修改或添加环境变量,Cloud Functions 将缓存以前的构建并且不会重新评估您的依赖项。目前您必须修改您的源文件以强制 Cloud Functions 重建您的函数。

  1. 有没有办法通过 requirements.txt 或其他方式强制云函数在部署期间导入最新版本的库?

我测试了这个并发现了相反的

您必须在 requirements.txt 中指定较新的版本 强制使用较新的库。 否则将使用现有库。

https://cloud.google.com/functions/docs/concepts/exec#multiple_functions 并没有说在创建新实例时某些文件不会被重用。 他们会复制一些文件,因为他们肯定不会为每个实例都进行新的完整安装。那会花太多时间。 关于 python 库,同样的观点是有效的。 在每次部署时安装所有 python 个库会花费太多时间。