【问题标题】:How can a Google Cloud Python function access a private Python packageGoogle Cloud Python 函数如何访问私有 Python 包
【发布时间】:2020-07-07 04:07:55
【问题描述】:
  1. 我正在使用 Python 使用 Google Cloud Function。其他几个功能正在生产中。
  2. 但是,为此,我另外创建了一个自定义 Python 包,该包在 github 上作为 private 存储库提供。
  3. 我需要在 Google Function 中安装包

我做了什么

  1. 我使用 functions-framework 在本地运行 Google 函数
  2. 我有一个 requirements.txt,其中有一个包的链接。这是通过将以下行添加到 requirements.txt 来完成的:
    -e git+https://github.com/<repo>/<project>#egg=<project>
  1. 我运行pip install -r requirements.txt。并且包安装成功。
  2. 现在在函数的 python 代码中使用 import &lt;pkg-name&gt; 可以正常工作,我可以访问所有函数。

将功能推送到云端时的挑战

  1. 根据文档,要将 Cloud 功能推送到 Google Cloud,我发出以下命令:
gcloud functions \
  deploy <function-name> \
  --trigger-http  \
  --entry-point <entry-function> \
  --runtime python37 \
  --project=<my-project>

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

  1. 我创建了一个谷歌云存储库并将其链接到 git 存储库,希望以某种方式我可以在 requirements.txt 中指定它。就是不知道怎么弄。

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

    -e git+https://${AUTH_USER}:${AUTH_PASSWORD}@github.com/<repo>/<project>#egg=<project>

这也报错了。

任何帮助或指导将不胜感激。

【问题讨论】:

    标签: python pip google-cloud-functions


    【解决方案1】:

    虽然@marian.viadoi 在上述评论中是正确的。 Google Cloud Function 无法访问私有 git 存储库,我已经实施了一种解决方法并共享以防万一。以下是已完成的工作:

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

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

    【讨论】:

      【解决方案2】:

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

      " 使用私有依赖项

      依赖项安装在云中 构建不提供对 SSH 密钥访问的环境。套餐 托管在需要基于 SSH 身份验证的存储库中 与您的项目代码一起出售和上传,如中所述 上一节。

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

      将你的依赖复制到本地目录:

      pip install -t DIRECTORY DEPENDENCY
      

      在DIRECTORY目录下添加一个空的init.py文件来打开它 进入一个模块。

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

      import DIRECTORY.DEPENDENCY
      

      "

      Specifying dependencies in Python

      【讨论】:

      • 谢谢@marian.vladoi。我不知道。啊,真是太不幸了。让我再检查一下文档。
      猜你喜欢
      • 2019-11-29
      • 2019-02-06
      • 2016-08-04
      • 1970-01-01
      • 2022-09-13
      • 1970-01-01
      • 2017-09-13
      • 2020-09-13
      • 2018-12-25
      相关资源
      最近更新 更多