2009-08-03 18 views
58

組み込みモジュールと競合するモジュールがあります。たとえば、myapp.emailモジュールはmyapp/email.pyで定義されています。組み込みモジュールと同じ名前のモジュールをインポートしようとすると、インポートエラーが発生します

myapp.email私のコードのどこにでも問題なく参照できます。しかし、自分の電子メールモジュールから組み込みの電子メールモジュールを参照する必要があります。

# myapp/email.py 
from email import message_from_string 

myapp.emailmessage_from_string方法を持っていないので、それは、それ自体のみを見つけ、したがってImportErrorを上昇させます。 import emailは、私がemail.message_from_stringを試したときに同じ問題を引き起こします。

これをPythonで行うためのネイティブサポートはありますか、または私の「電子メール」モジュールの名前をもっと具体的な名前に変更していますか?

答えて

83

この非常に問題を解決するAbsolute and Relative Importsについてお読みください。

from __future__ import absolute_import 

これを使用すると、未装飾のパッケージ名は常にトップレベルのパッケージを参照します。独自のパッケージにアクセスするには、相対インポート(from .email import ...)を使用する必要があります。

注:上記from ...ラインが.pyファイル、使用しているimport ...ライン上の任意の2.xのパイソンに入れることが必要です。 Python 3.xではこれがデフォルトの動作であるため、もはや必要ありません。

+1

ライフセーバー...... –

関連する問題