単一のインポートを使用して発生している実際の問題は、パッケージがモジュールよりも優先されるためです。
from package import item
を使用する場合、項目はパッケージのサブモジュール (またはサブパッケージ)、または関数、クラス、変数など、パッケージで定義された他の名前のいずれかであることに注意してください。このimport
ステートメントは、最初に項目がパッケージで定義されているかどうかをテストします。そうでない場合は、それがモジュールであると想定し、ロードを試みます。見つからない場合は、ImportError
例外が発生します。
とにかく、特定の名前で複数のモジュールをインポートすることはできないため、ファイルまたはディレクトリの名前を変更することを強くお勧めします。この問題は、各モジュール/パッケージ オブジェクトが に格納されているために発生します。これは単純なため、複数の等しいキーを含めることはできません。sys.modules
dict
foo.py
特に、と ディレクトリが別のディレクトリにあると仮定するとfoo
(そうでない場合はまだ import できませんfoo.py
)、次の場合:
from foo import gaz
foo.py
モジュールをロードしてに配置しsys.modules
、次のことを試みます。
from foo.bar import wakaka
foo.py
インポートはパッケージではなくモジュールを使用しようとするため、失敗します。
最初にインポートすると、逆のことが起こりますfoo.bar
。インポートはモジュールの代わりにパッケージを使用します。