AWS Elastic Beanstalk - приложение Flask не может импортировать пользовательский модуль - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь разместить приложение Flask на AWS Elastic Beanstalk в Python 3.6, но независимо от того, что я пытаюсь, URL-адрес приложения приводит к 500: Внутренняя ошибка сервера.

Структура моего приложенияследующим образом:

myApp: -application.py -mytransformers.py -requirements.txt

Я посмотрел журналы, и нужный мне отдельный скрипт на python, содержащий пользовательские преобразователи Scikit-learn (mytransformers.py), не может быть найден wsgi:

AttributeError: Can't get attribute 'MyTransformer' on <module '__main__' (built-in)>

Они мне нужны, потому что я выбрал модели Scikit-learn в репозитории S3, которые я импортирую в application.py, для которых требуются специальные трансформаторы.

Iпопытался переместить эти определения преобразователя в мой основной application.py сценарий, но он по-прежнему возвращает ту же ошибку.

Я думаю, что сценарий wsgi не может найти эти определения преобразователя, и я не нашел много способовлюдей с похожей проблемой.

Изменить 1

Я попытался добавить файл __init__.py в каталог приложения. Я все еще получаю ту же ошибку.Я пытаюсь загрузить конвейер Scikit-Learn с помощью Pickle, который содержит несколько пользовательских преобразователей, однако, когда я пытаюсь загрузить их, он выдает ошибку о невозможности найти пользовательские преобразователи, даже если я импортировал их в начале.сценария.Я попытался поместить определения классов для трансформаторов в сценарий application.py, но это по-прежнему не устраняет ошибку.

Редактировать 2

Я почти уверен, что ошибканаходится в EB и использует WSGI для управления приложением Flask.Мое приложение работает локально, это просто WSGI, который, похоже, не может найти вспомогательные функции.Я обнаружил аналогичную публикацию с использованием Azure, в которой была похожая проблема с WSGI, которая не находила функции, определенные в файле приложения: Ошибка с WSGI при развертывании приложения Flask в Azure

1 Ответ

0 голосов
/ 08 мая 2019

Я бы начал с добавления пустого файла с именем __init__.py в корень вашего приложения.В настоящее время приложение Flask в application.py не может обнаружить ваши преобразователи, потому что они не находятся на вашем пути к Python и не являются частью одного и того же пакета.

Добавление __init__.py сделает ваши трансформаторы импортируемыми, используя: from mytransformers import MyTransformer, потому что это добавит их в пакет приложения.

Редактировать: он работает локально?

...