AWS Lambda: невозможно импортировать модуль «пакет / файл»: нет модуля с именем «util» - PullRequest
0 голосов
/ 15 ноября 2018

Я изо всех сил пытаюсь заставить импорт модуля работать в AWS lambda с использованием Python 3.

Моя структура файла выглядит следующим образом:

package:
  stage1.py
  __init__.py
  util:
    helper1.py
    __init__.py

helper1.py - это простой класс утилит:

def foo():
  print("yes")

Внутри stage1.py У меня есть следующие строки, которые заставляют Lambda выдавать ошибку при запуске:

from util.helper1 import foo
foo()
Unable to import module 'package/stage1': No module named 'util'

Оба __init__.py файла пусты.

К сожалению, я вижу, что это работает, если я вызываю скрипт локально.Разочарование - это преуменьшение!

1 Ответ

0 голосов
/ 16 ноября 2018

Благодаря некоторым из приведенных выше ссылок и моему собственному (и необходимому) исследованию того, как импорт обрабатывается в python, я выяснил проблему, связанную с недоступными модулями.

Как я отлаживал свое приложение в Lambda:Я прикрепил эту строку кода к верхней части файла

print("Name is ({})".format(__name__))

Это дало мне вывод, который мог бы помочь мне принять взвешенное решение о том, как импортировать файлы в модуль util.Я видел вывод для stage1.py файла packager/stage1.Это позволило легко вносить изменения в код импорта.Я изменил импорт в файле stage1.py на (используя импорт по абсолютному пути - рекомендация pep):

from packager.util.helper1 import foo

По любой субъективной причине эта ссылка помогла мне понять процессбольше всего.

...