ホームページ >バックエンド開発 >Python チュートリアル >Python 3 で相対インポートを使用すると、「ModuleNotFoundError: No modulenamed x」が発生するのはなぜですか?
相対インポートと 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 サイトの他の関連記事を参照してください。