У меня есть такая структура каталогов:
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
Я пробовал другие способы импорта, но все равно получаю те же ошибки.






Я смог решить эту проблему, следуя этому комментарию к проблеме 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
Аналогичное решение здесь: sys.path.append(str(Path(__file__).resolve().parent))
Это работает для вас и после развертывания? Я пробовал это, и это работает в эмуляторе, но в функциях я вижу
Error: Forbidden Your client does not have permission to get URL / from this server.что подразумевает обход файловой системы