Модули внутри облачных функций firebase с python: ModuleNotFoundError: нет модуля с именем «src»

У меня есть такая структура каталогов:

python-functions/
--src
---- | api/
-------- | __init__.py
-------- | main.py
---- | __init__.py
---- | main.py

Я пытаюсь определить все свои функции в src/main.py, но реализации находятся в соответствующей папке.

# src/main.py
import src.api.main as api

@https_fn.on_request(timeout_sec=300)
def status(req: https_fn.Request) -> https_fn.Response:
    return api.status(req)
# src/api/main.py
def status(req: https_fn.Request):
    return https_fn.Response("Hello", status=200)

Но при развертывании я получаю эту ошибку:

# Importing like: import src
ModuleNotFoundError: No module named 'src'
127.0.0.1 - - [18/May/2023 00:09:43] "GET /\_\_/functions.yaml HTTP/1.1" 500 -
Error: Failed to parse build specification:

- FirebaseError Expect manifest yaml to specify a version number

или этот:

# importing like: from .api.main import main
ImportError: attempted relative import with no known parent package

127.0.0.1 - - [18/May/2023 00:28:19] "GET /__/functions.yaml HTTP/1.1" 500 -

Error: Failed to parse build specification:
- FirebaseError Expect manifest yaml to specify a version number

Я пробовал другие способы импорта, но все равно получаю те же ошибки.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
156
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я смог решить эту проблему, следуя этому комментарию к проблеме github. https://github.com/firebase/firebase-functions-python/issues/92#issuecomment-1549153623

# Adding this to the top of main.py works as a workaround, but it's not ideal:

import sys
from pathlib import Path

sys.path.insert(0, Path(__file__).parent.as_posix())

from test import base

Это работает для вас и после развертывания? Я пробовал это, и это работает в эмуляторе, но в функциях я вижу Error: Forbidden Your client does not have permission to get URL / from this server. что подразумевает обход файловой системы

J.Wincewicz 04.06.2023 00:00

Аналогичное решение здесь: sys.path.append(str(Path(__file__).resolve().parent))

kblst 07.06.2023 04:40

Другие вопросы по теме

Для таргетинга на S+ (версия 31 и выше) требуется, чтобы один из FLAG_IMMUTABLE или FLAG_MUTABLE для FireBaseMessaging
Целесообразно ли хранить мои ключи API в Firebase Remote Config?
Flutter Web, заблокированный политикой CORS, влияет только на настольные браузеры, но не на мобильные браузеры
Нет именованного параметра с именем dataRowMaxHeight. - firebase_ui_firestore - флаттер
Фатальное исключение: java.lang.NullPointerException — попытка вызвать виртуальный метод 'boolean java.lang.String.equals(java.lang.Object)' для нулевого объекта
Проблема после обновления Flutter Firebase? Семантическая проблема ARC (Xcode): нет известного метода класса для селектора «appleCredentialWithIDToken:rawNonce:fullName:»
Определение действующих лиц на диаграмме вариантов использования для мобильного приложения
Невозможно использовать действие сборки GoogleServicesJson в .NET 7.0
Остановить Nextjs 13 от кеширования результата/вызова Firebase
Дополнительные маршруты NextJS, не работающие, с предоставленным образцом