- 我正在使用Python的Google Cloud Function。其他几个功能正在生产中
- 然而,为此,我还创建了一个自定义Python包,该包在github上作为私有repo提供
- 我需要在谷歌功能中安装软件包
我所做的
- 我使用
functions-framework
在本地运行Google函数 - 我有一个requirements.txt,它有一个指向包的链接。这是通过在
requirements.txt
中添加以下行来完成的:
-e git+https://github.com/<repo>/<project>#egg=<project>
- 我运行
pip install -r requirements.txt
。并且程序包已成功安装 - 现在,在函数的python代码中使用
import <pkg-name>
工作,我可以访问所有函数
将功能推向云端时的挑战
- 根据文档,要将Cloud功能推送到Google Cloud,我发出命令:
gcloud functions
deploy <function-name>
--trigger-http
--entry-point <entry-function>
--runtime python37
--project=<my-project>
正如预期的那样,这会产生一个错误,因为它无法访问git的私人回购。
我创建了一个谷歌云存储库,并将其链接到git repo,希望以某种方式在requirements.txt中指定。只是不知道如何指定。
我尝试在Google Cloud Function中设置用户名和密码的环境变量(我同意这不是一个好主意(,并在
requirements.txt
中指定为:
-e git+https://${AUTH_USER}:${AUTH_PASSWORD}@github.com/<repo>/<project>#egg=<project>
这也造成了一个错误。
如有任何帮助或指导,我们将不胜感激。
虽然@marian.viadoi在上述评论中是正确的,即谷歌云功能无法访问私有git repo,但我已经实现了一个变通方法和共享,以备不时之需。以下是已经做的:
- Python包是根据中的文档准备的(https://packaging.python.org/tutorials/packaging-projects/)
- 二进制分布";whl";文件是使用
python3 setup.py bdist_wheel
创建的 - 这个whl文件被放在谷歌函数文件夹中。我选择把它放在它的
dist
文件夹下 - 在
requirements.txt
中,我向云函数所需的其他依赖项添加了一行:./dist/xxxx.whl
- 通过
gcloud deploy ..
将云功能推送到GCP - 成功安装后,包及其依赖项将自动安装在云功能的虚拟环境中
这并不能回答如何在谷歌功能中使用私有回购(这是不可能的(,但上述步骤确保了私有包可以在不同的云功能之间轻松共享和更新。
您的方法3(使用用户名和密码安装Git(确实有效。但请记住将它们添加为Build environment variables
,而不是Run environment variables
,因为在构建过程中会出现pip install
。如果您对使用个人凭据有顾虑,可以获得部署令牌(类似于个人凭据,带有用户名和密码(。
您不能从云功能访问私有回购。根据官方文件:
">使用私有依赖
依赖项安装在云中构建不提供对SSH密钥访问的环境。软件包托管在需要基于SSH的身份验证的存储库中的与您的项目代码一起出售并上传,如中所述上一节。
您可以使用带有-t DIRECTORY标志的pip-install命令来复制在部署应用程序之前,将私有依赖项放入本地目录,如下所示:
将您的依赖项复制到本地目录:
pip install -t DIRECTORY DEPENDENCY
将一个空的init.py文件添加到DIRECTORY目录以将其打开进入模块。
从该模块导入以使用您的依赖项:
import DIRECTORY.DEPENDENCY
">
在Python 中指定依赖项