无法将私有 python 依赖项添加到云函数

Cannot add private python dependency to cloud function

我正在尝试在 GCP 上部署一个 python 云函数,使用一个 python 包推送到另一个项目的工件注册表。

我按照说明操作了off the google cloud documentation:

部署cloudbuild的服务账号有作用:Artifact RegistryReader

cloudbuild中的错误:

CESTERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: Looking in indexes: https://pypi.org/simple, https://us-west1-python.pkg.dev/my-project-id/package-name/simple/

ERROR: Could not find a version that satisfies the requirement package_name==0.1.5 (from versions: none)

requirements.txt

--extra-index-url https://us-west1-python.pkg.dev/my-project-id/package-name/simple/
package_name==0.1.5

包的setup.py

from distutils.core import setup

setup(
    name="package_name",
    version="0.1.5",
    description="Python package",
    author="Benjamin BRETON",
    author_email="john.doe@gmail.com",
    url="",
    packages=["src/package_name"],
)

部署函数的cloudbuild.yaml

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  args:
  - gcloud
  - functions
  - deploy
  - ${_SERVICE_NAME}
  - --region=${_REGION}
  - --source=${_REPOSITORY_PATH}
  - --trigger-http
  - --allow-unauthenticated
  - --runtime=python39
  - --memory=128MB
  - --entry-point=${_ENTRY_POINT}
  - --service-account=${_SERVICE_ACCOUNT}
  - --set-env-vars=OUTPUT_BUCKET_NAME=${_OUTPUT_BUCKET_NAME}, URL_BUCKET_NAME=${_URL_BUCKET_NAME}
options:
  logging: 'CLOUD_LOGGING_ONLY'

我尝试 运行 pip install -r requirements.txt 它在本地运行 如果我删除库导入,云函数将部署并运行。 我也尝试切换到 --gen2 版本的云函数,但没有成功。

人们似乎有类似的问题:here 有不同的错误。

我成功复制了您提供的示例代码。我通过在 requirements.txt 中将 package_name 版本更改为 0.1 解决了这个问题,因为没有找到 package_name==0.1.5 的匹配分布。代码应该是:

package_name==0.1

此外,我还更新 gcloud 组件并通过 运行 安装 beta 命令如下:

gcloud components update
gcloud components install beta

如果您有任何疑问或需要说明,请告诉我。

我在另一个问题中得到了这个问题的答案,谢谢:

要获得 运行t 访问托管在工件注册表上的私有库,您需要将角色 Artifact Registry Reader 授予:

  • 服务帐号运行cloudbuild
  • 云构建的默认服务帐户(为您运行云构建提供您自己指定的服务帐户)。此服务帐户的名称为:<PROJECT-NUMBER>@cloudbuild.gserviceaccount.com

您可以在项目设置中找到<PROJECT-NUMBER>