Python 3 の相対インポート: 理解と回避策
相対インポートは、同じディレクトリ内のモジュールをインポートするために一般的に使用されますが、場合によってはImportError や ModuleNotFoundError などのエラー。これらの問題を解決するには、根本的な理由を理解することが重要です。
Python 3 の相対インポートの動作
Python 3 では、相対インポートは、モジュールが他のモジュールをインポートしている場合にのみ機能します。同じパッケージ内にあります。パッケージは、パッケージのステータスを示す __init__.py ファイルを含むディレクトリです。パッケージに追加モジュールを含むサブディレクトリが含まれている場合、それらのサブディレクトリから他のサブディレクトリ内のモジュールへの相対インポートは失敗します。
ルート パッケージ インクルード
この問題を解決するには、次のことを確認してください。関連するモジュールの親ディレクトリはパッケージであり、__init__.py ファイルの存在によって示されます。親ディレクトリがパッケージではない場合、相対インポートは「既知の親パッケージが存在しない相対インポートを試行しました。」というエラーで失敗します。
エラー: "ModuleNotFoundError: No module names 'mymodule'"
このエラーは、インポートされるモジュール (この場合は mymodule) が指定されたパスに存在しない場合に発生します。モジュールが存在し、名前が正しいことを確認してください。
エラー: "SystemError: 親モジュール '' が読み込まれていないため、相対インポートを実行できません。"
このエラーは、親モジュール (相対インポートを含むモジュール) がロードされていません。相対インポートを試行する前に、親モジュールが実行中またはインポートされていることを確認してください。
相対インポートの回避策
相対インポートを回避できない場合は、次の回避策があります。
パッケージ内でのスクリプトの実行に関する注意
Python の作成者である Guido van Rossum は、パッケージ内でスクリプトを実行することはアンチパターンであると考えており、それは不要なものとして。ただし、これが必要なシナリオでは、上記の回避策を採用できます。
以上がPython 3 の相対インポートが失敗するのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。