2009-08-03 4 views
58

Ich habe ein Modul, das mit einem integrierten Modul in Konflikt steht. Zum Beispiel ein myapp.email Modul definiert in myapp/email.py.Der Import eines Moduls mit dem gleichen Namen wie ein eingebautes Modul führt zu einem Importfehler.

Ich kann myapp.email überall in meinem Code ohne Problem verweisen. Ich muss jedoch auf das integrierte E-Mail-Modul von meinem E-Mail-Modul verweisen.

# myapp/email.py 
from email import message_from_string 

sie sich nur findet, und deshalb wirft ein ImportError, da myapp.email keine message_from_string Methode hat. import email verursacht das gleiche Problem, wenn ich versuche email.message_from_string.

Gibt es irgendeine native Unterstützung, um dies in Python zu tun, oder bleibe ich dabei, mein "E-Mail" -Modul in etwas spezifischeres umzubenennen?

Antwort

83

Sie möchten über Absolute and Relative Imports lesen, die genau dieses Problem anspricht. Verwenden Sie:

from __future__ import absolute_import 

Verwenden Sie, dass jeder schmucklose Paketname immer auf das Paket der obersten Ebene beziehen. Sie müssen dann relative Importe (from .email import ...) verwenden, um auf Ihr eigenes Paket zuzugreifen.

HINWEIS: Die oben muss from ... Linie in jede 2.x Python .py Dateien über den import ... Linien gesetzt werden Sie verwenden. In Python 3.x ist dies das Standardverhalten und wird daher nicht mehr benötigt.

+1

Lebensretter ...... –

Verwandte Themen