Google Cloud Python 函数如何访问私有 Python 包

RmR*_*RmR 5 python pip google-cloud-functions

  1. 我正在使用 Python 使用 Google Cloud Function。其他几个功能正在生产中。
  2. 但是,为此,我还创建了一个自定义 Python 包,该包可在 github 上作为私有存储库使用。
  3. 我需要在 Google Function 中安装该软件包

我做了什么

  1. 我使用本地运行 Google 函数 functions-framework
  2. 我有一个requirements.txt,它有一个包的链接。这是通过将以下行添加到requirements.txt
    -e git+https://github.com/<repo>/<project>#egg=<project>
Run Code Online (Sandbox Code Playgroud)
  1. 我跑pip install -r requirements.txt。并且包安装成功。
  2. 现在在使用import <pkg-name>作品的函数的python代码中,我能够访问所有函数。

将功能推至云端时面临的挑战

  1. 根据文档,要将 Cloud 函数推送到 Google Cloud,我发出以下命令:
gcloud functions \
  deploy <function-name> \
  --trigger-http  \
  --entry-point <entry-function> \
  --runtime python37 \
  --project=<my-project>
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这会产生错误,因为它无权访问 git 中的私有存储库。

  1. 我创建了一个 Google Cloud Repository 并将它链接到 git repo,希望能以某种方式在 requirements.txt 中指定它。就是不知道怎么办。

  2. 我尝试在 Google Cloud Function 中为用户名和密码设置环境变量(这不是一个好主意,我同意)并在以下内容中指定它们requirements.txt

    -e git+https://${AUTH_USER}:${AUTH_PASSWORD}@github.com/<repo>/<project>#egg=<project>
Run Code Online (Sandbox Code Playgroud)

这也给了一个错误。

任何帮助或方向将不胜感激。

RmR*_*RmR 8

虽然@marian.viadoi 在上述评论中是正确的。Google Cloud Function 无法访问私有 git repo,我已经实施了一种解决方法并共享以备不时之需。这是已经完成的工作:

  1. Python 包是根据 ( https://packaging.python.org/tutorials/packaging-projects/ ) 中的文档准备的
  2. 使用创建了一个二进制分发“whl”文件 python3 setup.py bdist_wheel
  3. 这个 whl 文件被放在 google 函数文件夹中。我选择把它放在它的一个dist文件夹下。
  4. requirements.txt我添加了行:./dist/xxxx.whl到云功能所需的其他依赖项
  5. 通过以下方式将云功能推送到 GCP gcloud deploy ..
  6. 安装成功后,软件包及其依赖项会自动安装在云功能的虚拟环境中

并没有回答如何在 Google Functions 中使用私有存储库(这是不可能的),但上述步骤确保私有包可以在不同的云功能之间轻松共享和更新。


mar*_*doi 4

您无法从云功能访问私有仓库。根据官方文档:

"使用私有依赖项

依赖项安装在不提供 SSH 密钥访问权限的 Cloud Build 环境中。托管在需要基于 SSH 身份验证的存储库中的包必须与项目代码一起提供和上传,如上一节所述。

您可以在部署应用程序之前使用带有 -t DIRECTORY 标志的 pip install 命令将私有依赖项复制到本地目录,如下所示:

将您的依赖项复制到本地目录中:

pip install -t DIRECTORY DEPENDENCY
Run Code Online (Sandbox Code Playgroud)

将空的init .py 文件添加到 DIRECTORY 目录中,将其变成模块。

从此模块导入以使用您的依赖项:

import DIRECTORY.DEPENDENCY
Run Code Online (Sandbox Code Playgroud)

在 Python 中指定依赖项