Здесь вы используете relative import
, который работает, если код, который вы выполняете, находится в модуле.Однако, поскольку ваш код выполняется не как модуль, ваш AWS Lambda дает сбой.
https://stackoverflow.com/a/73149/6391078
При быстром запуске локально возникла следующая ошибка:
PYTHON 3.6
Traceback (most recent call last):
File "lambda_function.py", line 4, in <module>
from .first_child_class import FirstChildClass
ModuleNotFoundError: No module named '__main__.first_child_class'; '__main__' is not a package
Ваши тесты пройдены, потому что ваш набор тестов импортирует файл как module
из папки lambda_application
, которая обрабатывается как пакет в модуле тестирования
Thisзаставил меня двигаться в правильном направлении, но не совсем дал мне ответ, но привел меня к ответу, поэтому я подумал, что обновлю то, что нашел здесь.
Я не пробовал, но из чегоЯ обнаружил, я считаю, что:
from first_child_class import FirstChildClass
было бы самым простым решением.
В итоге я переместил классы в подкаталог и по существусделал то же, что и выше, но с добавленным именем пакета.
Итак, структура файла изменилась на:
.
├── Makefile
├── Pipfile
├── Pipfile.lock
├── README.md
├── template.yaml
├── tests
│ ├── __init__.py
│ └── unit
│ └── lambda_application
│ ├── test_handler.py
│ └── test_parent_child_class.py
└── lambda_application
├── __init__.py
└── lib
├── first_child_class.py
├── second_child_class.py
└── parent_class.py
├── lambda_function.py
└── requirements.txt
, и мой импорт стал from lib.first_child_class import FirstChildClass