Как развернуть облачную функцию Google, когда main.py и requirements.txt не находятся в одном каталоге - PullRequest
2 голосов
/ 27 мая 2020

У меня есть структура каталогов, которая выглядит следующим образом:

src/
    main.py
requirements.txt

Поскольку, похоже, нет возможности настройки , где искать requirements.txt, я был смирился с запуском gcloud functions deploy во внешнем каталоге, и я надеялся, что флаг --entry-point может дать мне некоторое пространство для маневра для нацеливания main.py внутри src. К сожалению, похоже, что он определяет только имя метода.

Итак, есть ли способ заставить эту работу, кроме принудительного размещения main.py и requirements.txt в одном каталоге?

Для ссылка, команда, которую я пытаюсь запустить, и соответствующее сообщение об ошибке:

gcloud functions deploy refresh_classes --entry-point main --runtime python37 --trigger-resource send_refresh --trigger-event google.pubsub.topic.publish --timeout 540s

Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function failed on loading user code. Error message: File main.py that is expected to define function doesn't exist

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Это невозможно при настройке gcloud отдельно или без дополнительных исходных файлов. Cloud Functions ожидает один каталог source, содержащий как requirements.txt, так и main.py.

1 голос
/ 27 мая 2020

Я подозреваю, что это соглашение возникает в Cloud Functions, потому что для других языков (например, Golang, Java) исходный каталог (по соглашению) достаточен для описания не только источников, но и дескриптора проекта (go.mod, pom.xml et c.), Который определяет внешние пакеты. В Python они могут быть отключены.

Вы пробовали создать ссылку с ./requirements.txt на ./src/requirements.txt? Возможно, это не сработает, потому что источник ссылки находится вне контекста «источника», но это может сработать.

В противном случае вам может не повезти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...