ホームページ >バックエンド開発 >Python チュートリアル >Python 3 で相対インポートを使用すると、「ModuleNotFoundError: No modulenamed x」が発生するのはなぜですか?

Python 3 で相対インポートを使用すると、「ModuleNotFoundError: No modulenamed x」が発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 02:53:02852ブラウズ

 Why am I getting

相対インポートと ModuleNotFoundError: x という名前のモジュールがありません

Python 3 で相対インポートを利用しようとすると、プログラマは時折「ModuleNotFoundError: x という名前のモジュールがありません」というエラー。このエラーは、インタープリタが実行時にその特定の名前を持つモジュールを見つけることができないことを示します。

この問題を理解するには、絶対インポートと相対インポートを区別することが重要です。絶対インポートは sys.path で使用可能なモジュールをインポートするために使用され、相対インポートは現在のモジュールを基準にしてモジュールをインポートするために使用されます。ただし、相対インポートでは、現在のモジュールがパッケージに属している必要があります。

提供されるコード スニペットは、test.py と config.py の 2 つのファイルで構成されます。 config.py には関数と変数が含まれており、test.py は config をインポートしてその「debug」パラメータにアクセスします。 __init__.py ファイルが存在するにもかかわらず、「ModuleNotFoundError: 'config' という名前のモジュールがありません」エラーが発生します。

このエラーは、実行中のファイル (test.py) がその中に格納されていないことが原因で発生します。パッケージ構造。したがって、相対インポートを実行できません。以下の変更されたコード スニペットに見られるように、絶対インポートを採用すると、この問題は解決されます。

<code class="python"># test.py
import ryan.config  # Replace config with ryan.config for absolute import
print(ryan.config.debug)</code>

あるいは、パッケージ構造を作成し、その中に test.py を配置すると、相対インポートが可能になります。ディレクトリ構造は次のようになります。

.
├── __init__.py
└── ryan
    ├── __init__.py
    ├── config.py
    └── test.py

結論として、相対インポートは、現在のモジュールがパッケージに属している場合にのみ許可されます。実行中のファイルにパッケージ構造がない場合は、「ModuleNotFoundError」例外を回避するために絶対インポートを利用する必要があります。

以上がPython 3 で相対インポートを使用すると、「ModuleNotFoundError: No modulenamed x」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。