UPDATE :
Ошибка (в данном конкретном случае) была вызвана не циклическим импортом, а недостатком конфигурации virtualenv
. См. мой ответ ниже для уточнения.
Я использую:
Я создаю веб-приложение с использованием Flask, помимо прочего мне нужна возможность отправлять почту пользователям. Я построил отдельный модуль Python, который будет отвечать за обработку почты. Хотя я столкнулся со странной (как мне кажется, по крайней мере) проблемой import
после того, как я добавил модуль обработки электронной почты в свое приложение.
Вот проблема (изолированная) import
, с которой я столкнулся:
app.py
from flask import Flask
from test_mail import EmailTool
app = Flask(__name__)
@app.route('/')
def index():
return 'Testing!'
test_mail.py
from email.message import EmailMessage
class EmailTool(object):
pass
После запуска моего приложения и перехода к индексу (т. Е. /
) я получаю:
Traceback (most recent call last):
File "/app.py", line 2, in <module>
from tmp_test_mail import EmailTool
File "/test_mail.py", line 1, in <module>
from email.message import EmailMessage
ImportError: cannot import name EmailMessage
Я изменил код для test_mail.py , чтобы убедиться, что модуль email
доступен:
import email
class EmailTool(object):
pass
Таким образом, я не получаю сообщение об ошибке.
Поиск возможных причин и решений заставил меня поверить ( 1 , 2 , 3 , 4 , 5 ), скорее всего, это связано с циклической ссылкой. Хотя даже после прочтения всех упомянутых материалов и выявления причины проблемы, я все еще не могу понять, как это циркуляр ссылка. Поэтому я делаю вывод, что либо оно не является круговым, а причина кроется в чем-то другом, либо оно круговое, и я упускаю что-то очевидное здесь.
Прошу помощи в понимании следующего:
- Считается ли представленный выше случай круговой ссылкой? (Если да, то каким образом это действительно круговой )?
- Почему я получаю ошибку, когда я
from email.message import EmailMessage
, но не получаю сообщение об ошибке, если я вместо этого import email
?