标签:python git package google-cloud-platform google-cloud-functions
我正在从源存储库部署Google Cloud功能.只要我没有在我的main.py中对存储库中的任何用户定义函数进行任何引用(即包中的脚本/函数或除了main之外的package2中的脚本/函数),我就可以使Google功能部署得很好. PY).
.
├── package
| ├── __init__.py
| ├── main.py
| ├── requirements.txt
| ├── script1.py
| └── script2.py
├── package2
| ├── __init__.py
| ├── script3.py
| └── script4.py
└── ...
我有关于此功能部署here和here的最近有2个Stack Overflow问题.他们共同指导我找到一个解决方案,其中main.py和requirements.txt在一个包中,我使用该包作为源部署Google Cloud Function.现在的问题是我需要能够访问其他包/脚本中的函数/脚本.如果我在main.py中包含一个类似于package.script1 import foo的语句,我在部署函数时会收到类似下面的错误:
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function load error: Code in file main.py can't be loaded.
Did you list all required modules in requirements.txt?
Detailed stack trace: Traceback (most recent call last):
File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/wo
rker.py", line 211, in check_or_load_user_function
_function_handler.load_user_function()
File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/wo
rker.py", line 140, in load_user_function
spec.loader.exec_module(main)
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/user_code/main.py", line 4, in <module>
from package.script1 import foo
ModuleNotFoundError: No module named 'package'
我目前正在使用此google功能部署声明部署此功能:
gcloud functions deploy NAME --source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/BRANCH_NAME/paths/package/ --trigger-topic TOPIC
由于this stack overflow question中的问题,将main.py和requirements.txt移回根目录不起作用.
我需要一种在gcloud函数deploy …语句中导入用户定义的包/函数的方法.我的main.py使用package.script1.py,package.script2.py,package2.script3.py和package2.script4.py中的函数.如何实现这一目标?
编辑/更新信息
我在每个包(package和package2)中都有__init__.py文件,但它们目前是空白/空的.
我尝试了以下gcloud deploy …选项:
使用此deploy命令在根目录中的main.py和requirements.txt(而不是上面/原始所示的配置):
gcloud functions deploy NAME --source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/BRANCH --trigger-topic TOPIC
这会产生以下错误:
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function load error: File main.py that is expected to define function doesn't exist
>为了明确地将根目录作为源调用,我也尝试使用与#1相同的文件配置
gcloud functions deploy NAME --source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/BRANCH/paths/ --trigger-topic TOPIC
它给出了与#1相同的错误:
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function load error: File main.py that is expected to define function doesn't exist
>在这个问题中使用原始文件结构(包中有main.py和requirements.txt),我已经尝试了上面提供的deploy语句.它解决了main.py未找到的问题,但是给出了上述原始问题中所述的错误
我还应该尝试什么?
解决方法:
你应该像这样构建你的应用程序:
.
├── main.py
├── package
│ ├── __init__.py
│ ├── script1.py
│ └── script2.py
├── package2
│ ├── __init__.py
│ ├── script3.py
│ └── script4.py
└── requirements.txt
然后在main.py中,你可以这样做:
from package.script1 import foo
from package2.script2 import bar
# etc
标签:python,git,package,google-cloud-platform,google-cloud-functions 来源: https://codeday.me/bug/20190710/1424923.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。