2009-08-03 12 views
58

Ho un modulo che è in conflitto con un modulo incorporato. Ad esempio, un modulo myapp.email definito in myapp/email.py.Provare a importare il modulo con lo stesso nome di un modulo incorporato causa un errore di importazione

Posso fare riferimento a myapp.email ovunque nel mio codice senza problemi. Tuttavia, ho bisogno di fare riferimento al modulo email incorporato dal mio modulo email.

# myapp/email.py 
from email import message_from_string 

Essa si trova solo, e quindi solleva un ImportError, poiché myapp.email non ha un metodo message_from_string. import email causa lo stesso problema quando provo email.message_from_string.

C'è un supporto nativo per farlo in Python, o sono bloccato a rinominare il mio modulo "email" con qualcosa di più specifico?

risposta

83

Si consiglia di leggere su Absolute and Relative Imports che risolve questo problema. Utilizzare:

from __future__ import absolute_import 

Utilizzando ciò, qualsiasi nome di pacchetto non ordinato farà sempre riferimento al pacchetto di livello superiore. Dovrai quindi utilizzare le importazioni relative (from .email import ...) per accedere al tuo pacchetto.

NOTA: È possibile che questofrom ... linea deve essere messo in alcun Python 2.x .py file sopra le import ... linee che si sta utilizzando. In Python 3.x questo è il comportamento predefinito e quindi non è più necessario.

+1

Lifesaver ...... –

Problemi correlati