組み込みモジュールと競合するモジュールがあります。たとえば、myapp.email
で定義されているmyapp/email.py
モジュール。
コードのどこでも問題なくmyapp.email
を参照できます。ただし、メールモジュールから組み込みのメールモジュールを参照する必要があります。
# myapp/email.py
from email import message_from_string
myapp.email
にはmessage_from_string
メソッドがないため、自分自身を検出するだけなので、ImportError
が発生します。 import email
を試してみると、email.message_from_string
で同じ問題が発生します。
Pythonでこれを行うためのネイティブサポートはありますか、それとも「メール」モジュールの名前をより具体的な名前に変更する必要がありますか?
この問題に対処する 絶対および相対インポート についてお読みください。使用する:
from __future__ import absolute_import
これを使用すると、装飾されていないパッケージ名は常に最上位パッケージを参照します。次に、相対的なインポート(from .email import ...
)独自のパッケージにアクセスします。
注:上記のfrom ...
行は、2.x Python .py
ファイルはimport ...
使用している行。 Python 3.xでは、これはデフォルトの動作であるため、必要ありません。