Я развертываю функцию Google Cloud из исходного хранилища.Я могу получить функцию Google для точного развертывания, если в своем main.py
я не буду ссылаться ни на одну из моих пользовательских функций в хранилище (т. Е. Скрипты / функции в package
или package2
ниже.кроме main.py
).
.
├── package
| ├── __init__.py
| ├── main.py
| ├── requirements.txt
| ├── script1.py
| └── script2.py
├── package2
| ├── __init__.py
| ├── script3.py
| └── script4.py
└── ...
У меня есть 2 недавних вопроса о переполнении стека относительно этой функции: здесь и здесь .Они вместе направили меня к решению, в котором main.py
и requirements.txt
находятся в пакете, и я развернул Облачную функцию Google с этим пакетом в качестве источника.Однако теперь проблема в том, что мне нужно иметь доступ к функциям / сценариям в других пакетах / сценариях.Если я включаю оператор типа from package.script1 import foo
в main.py
, при развертывании функции появляется ошибка, подобная приведенной ниже:
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
Перемещение main.py
и requirements.txt
обратно в корневой каталог не работает из-за проблем в этот вопрос переполнения стека .
Мне нуженспособ импорта пользовательских пакетов / функций во время оператора gcloud functions deploy ...
.My main.py
использует функции в package.script1.py
, package.script2.py
, package2.script3.py
и package2.script4.py
.Как это можно сделать?
РЕДАКТИРОВАНИЕ / ОБНОВЛЕНИЕ ИНФОРМАЦИИ
У меня есть __init__.py
файлов в каждом из пакетов (package
и package2
), но в настоящее время они пустые/empty.
Я попробовал следующие опции gcloud 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
в package
), я попробовал оператор развертывания, представленный выше.Это решает проблему main.py
not found, но выдает ошибку, как указано в оригинальном вопросе выше
Что еще мне следует попробовать?