"ImportError: cannot import name E-mail" in der Flasche
Ich gebaut habe, ist eine einfache web app mit Kolben und Python, die ich hochladen wollen auf Heroku.
Beim Start meiner app lokal mit dem folgenden Skript:
#!venv/bin/python
from app import app
app.run(debug = True)
Bekomme ich diese Fehlermeldung:
Traceback (most recent call last):
File "./run.py", line 2, in <module>
from app import app, mail
File "/home/ricardo/personalSite/app/__init__.py", line 3, in <module>
from app import index
File "/home/ricardo/personalSite/app/index.py", line 6, in <module>
from emails import send_email
File "/home/ricardo/personalSite/app/emails.py", line 2, in <module>
from app import app, mail
ImportError: cannot import name mail
So, es kann nicht importieren mail
.
Innerhalb der app
- Verzeichnis habe ich diese __init__.py
hier ist, habe ich das erstellen der Mail
Objekt, das ginving mir die Mühe zu importieren:
from flask import Flask
app = Flask(__name__)
from app import index
from flask.ext.mail import Mail
mail = Mail(app)
- Und das ist die Datei emails.py
wo rufe ich die send_mail
Funktion:
from flask.ext.mail import Message
from app import app, mail
from flask import render_template
from config import ADMINS
from decorators import async
Also laut der Fehlermeldung ist der Fehler in dieser Datei, in der from app import app, mail
.
Was ist das problem? Warum kann Sie nicht importieren mail
?
Update:
Dies ist mein Verzeichnis:
persSite\
venv\
<virtual environment files>
app\
static\
templates\
__init__.py
index.py
emails.py
decorators.oy
tmp\
run.py
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie eine zirkuläre Abhängigkeit. Sie haben zu erkennen, was Python ist zu tun, wenn es eine Datei importiert.
Wenn Python eine Datei importiert, Python schaut, um zu sehen, wenn die Datei bereits begonnen hat, importiert werden, vor. Also, wenn Modul A importiert das Modul B die Einfuhren Modul Ein, dann ist Python die:
Hier ist
app/__init__.py
, das ist die erste zu importierende Datei aus.Wenn diese Datei importiert, so wird nur Python das Skript ausgeführt. Jedem globalen Attribut erstellt, wird ein Teil der Attribute des Moduls. Also, durch die Zeit, die Sie auf die Dritte Linie, die die Attribute 'Flasche' und 'app' definiert wurden. Allerdings, wenn Sie auf die Dritte Zeile, Python beginnt versucht, zu importieren
index
ausapp
. Also, es beginnt mit der Ausführung derapp/index.py
Datei.Diese, natürlich, sieht wie folgt aus:
Denken Sie daran, wenn Sie diese Python-Datei importiert wird, haben Sie bisher nur definiert
Flask
undapp
imapp
Modul. Daher, versucht, zu importierenmail
wird nicht funktionieren.So, Sie brauchen, um neu anordnen code, so dass, wenn
app.index
stützt sich auf ein Attribut inapp
, dassapp
definiert das Attribut, bevor Sie versuchen, zu importierenapp.index
.Dies ist wahrscheinlich das problem:
In der Datei 'app/emails.py' der import wird aus dem aktuellen Modul, und nicht eine verschachtelte app-Modul. Versuchen:
Wenn es nicht funktioniert, sollten Sie aktualisieren Sie Ihre Frage mit einer detaillierten Auflistung im Verzeichnis.