У меня есть приложение фляги, которое я пытаюсь проверить, но у меня возникает ошибка импорта, которая медленно убивает меня.Это классический «работал час назад, а теперь нет».
Моя структура пакета выглядит следующим образом:
__init__.py
main.py
/tasks
email_utils.py
send_api.py
__init__.py
send_api.py содержит класс с именем SendEmail, который я пытаюсьимпорт из main.py для добавления в качестве ресурса, например:
from tasks.send_api import SendEmail
, что вызывает ошибку ImportError.Я также попытался
from tasks import send_api
app = Flask(__name__)
api = Api(app)
api.add_resource(send_api.SendEmail, '/send')
, но в последней строке выдается ошибка AttributeError, в которой говорится, что SendEmail не является атрибутом send_api.Если я добавляю точку останова после простого импорта send_api и проверяю ее, используя dir (send_api), имя класса не отображается в атрибутах, равно как и другие глобальные переменные / классы, за исключением некоторых типов импорта.Мне также странно, что PyCharm, похоже, распознает SendEmail как класс send_api и не выдает мне никаких предупреждений.
send_api.py структурирован так
from flask_restful import Resource
from flask_restful import abort as fr_abort
from werkzeug.wrappers import BaseResponse as Response
from customexceptions import MissingEnvironmentVariables
from tasks import email_utils
class SendEmail(Resource):
#class logic here
Если я простоимпортировать send_api из задач в main.py и dir (send_api), единственные значимые результаты, которые я получаю, - это MissingEnvironmentVariables, Resource, Response и fr_abort (все вещи, импортированные в send_api.py, за исключением email_utils, которые, похоже, должны отображаться. Дажеemail_utils, похоже, не подняли.
Я уже давно занимаюсь этим и на самом деле просто не знаю, как это исправить. Мне также кажется странным, что импортироватьemail_utils.py от send_api.py Я должен сделать
from tasks import email_utils
как
import email_utils
или
import .email_utils
, похоже, тоже не работает.
Извините за длинный пост, пожалуйста, дайте мне знать, если я явно что-то делаю не так, или укажите на связанный вопрос, который поможет.