Google Cloud Functions - 如何从另一个项目的 GCP 存储库导入 Python 包(通过 PIP)?
Google Cloud Functions - How to import a Python package (via PIP) from a GCP Repository in another project?
我需要在多个项目中使用 GCP 中的私有 Python 包。我还没有尝试过 Artifact Registry,因为它仍处于 alpha 阶段,所以现在我一直在尝试使用简单的存储库,但我愿意接受其他选择。
我在项目 A 的 GCP 存储库中有一个 Python 包源代码,我在项目 A 的存储库中也有一个云函数。在这个云函数中,我通过添加 git+https://source.developers.google.com/p/project-a/r/my-python package
在我的 requirements.txt
文件中。
如果我在我的终端中通过 gcloud functions
在项目 A 中部署这个云函数,指定 --source=https://source.developers.google.com/projects/project-a/repos/my-cloud-function
和 --project=project-a
,它工作正常,并且该函数可以成功导入元素当我调用它时包,但如果我在项目 B 中部署此函数,我会收到以下错误:
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: `pip_download_wheels` had stderr output:
Running command git clone -q https://source.developers.google.com/p/project-a/r/my-python-package /tmp/pip-req-build-f_bcp4y9
remote: PERMISSION_DENIED: The caller does not have permission
remote: [type.googleapis.com/google.rpc.RequestInfo]
remote: request_id: "abe4(...)"
fatal: unable to access 'https://source.developers.google.com/p/project-a/r/my-python-package/': The requested URL returned error: 403
ERROR: Command errored out with exit status 128: git clone -q https://source.developers.google.com/p/project-a/r/my-python-package /tmp/pip-req-build-f_bcp4y9 Check the logs for full command output.
这似乎是一个权限问题。但是,如果我从 requirements.txt
中删除包依赖项,它会很好地部署,这意味着项目 B 确实可以访问项目 A 的存储库,所以这似乎是 Pip 内部的一个问题。但是pip部署到A项目没有问题,有点迷茫
非常感谢。
Artifact Registry is GA 并且自去年以来不再 Alpha/Beta。
我复制了你的问题。该错误确实是由于权限引起的,当您删除 requirements.txt
上的行时,它并没有发生在部署中,可能是因为凭据可以访问这两个项目。
为了使部署正确,您必须将存储库的权限添加到可以在 Cloud Functions
上找到的进行部署的服务帐户(即 CF 服务帐户)- (select your Cloud Function)
- Details
,应该是 project@appspot.gserviceaccount.com
找到服务帐户后,通过单击 Settings
- Permissions
将其添加到云存储库,并至少添加 Source Repository Reader
角色
我需要在多个项目中使用 GCP 中的私有 Python 包。我还没有尝试过 Artifact Registry,因为它仍处于 alpha 阶段,所以现在我一直在尝试使用简单的存储库,但我愿意接受其他选择。
我在项目 A 的 GCP 存储库中有一个 Python 包源代码,我在项目 A 的存储库中也有一个云函数。在这个云函数中,我通过添加 git+https://source.developers.google.com/p/project-a/r/my-python package
在我的 requirements.txt
文件中。
如果我在我的终端中通过 gcloud functions
在项目 A 中部署这个云函数,指定 --source=https://source.developers.google.com/projects/project-a/repos/my-cloud-function
和 --project=project-a
,它工作正常,并且该函数可以成功导入元素当我调用它时包,但如果我在项目 B 中部署此函数,我会收到以下错误:
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: `pip_download_wheels` had stderr output:
Running command git clone -q https://source.developers.google.com/p/project-a/r/my-python-package /tmp/pip-req-build-f_bcp4y9
remote: PERMISSION_DENIED: The caller does not have permission
remote: [type.googleapis.com/google.rpc.RequestInfo]
remote: request_id: "abe4(...)"
fatal: unable to access 'https://source.developers.google.com/p/project-a/r/my-python-package/': The requested URL returned error: 403
ERROR: Command errored out with exit status 128: git clone -q https://source.developers.google.com/p/project-a/r/my-python-package /tmp/pip-req-build-f_bcp4y9 Check the logs for full command output.
这似乎是一个权限问题。但是,如果我从 requirements.txt
中删除包依赖项,它会很好地部署,这意味着项目 B 确实可以访问项目 A 的存储库,所以这似乎是 Pip 内部的一个问题。但是pip部署到A项目没有问题,有点迷茫
非常感谢。
Artifact Registry is GA 并且自去年以来不再 Alpha/Beta。
我复制了你的问题。该错误确实是由于权限引起的,当您删除 requirements.txt
上的行时,它并没有发生在部署中,可能是因为凭据可以访问这两个项目。
为了使部署正确,您必须将存储库的权限添加到可以在 Cloud Functions
上找到的进行部署的服务帐户(即 CF 服务帐户)- (select your Cloud Function)
- Details
,应该是 project@appspot.gserviceaccount.com
找到服务帐户后,通过单击 Settings
- Permissions
将其添加到云存储库,并至少添加 Source Repository Reader
角色