ホームページ >バックエンド開発 >Python チュートリアル >Python 3 で相対インポートを使用すると「ImportError」が発生するのはなぜですか?
Python 3 の相対インポート: 謎を解く
相対インポートは、同じディレクトリ内からモジュールをインポートする便利な方法を提供します。ただし、場合によっては、次のエラーが発生する可能性があります:
これらのエラーを理解するために、分析してみましょう共通のディレクトリ構造:
main.py mypackage/ __init__.py mymodule.py myothermodule.py
この場合、相対インポート "from 「myothermodule.py」内の「.mymodule import myfunction」は、モジュール検索パスに「mymodule.py」が表示されないため失敗します。これは、sys.path 変数に依存する Python のモジュール解決メカニズムによるものです。
1 つの解決策は、相対インポートの代わりに絶対インポートを使用することです。
from mypackage.mymodule import myfunction
これにより、次のことが保証されます。 Python は、sys.path にあると想定される「mypackage」モジュール パスで「mymodule」を検索します。
ただし、モジュールをスクリプトとして実行できるようにしながら、相対インポートの利便性を維持したい場合は、次の点を考慮してください:
import sys import os SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.append(os.path.dirname(SCRIPT_DIR)) from mypackage.mymodule import myfunction
python3 -m mypackage.myothermodule
このアプローチにより、モジュールをファイルシステムではなく Python モジュール システムで見つけることができます。
結論として、次のエラー メッセージが表示されます。相対インポートは、Python のモジュール解決メカニズムに由来します。 sys.path の役割を理解し、さまざまな戦略を利用することで、これらのエラーを解決し、Python アプリケーションでシームレスにインポートできるようになります。
以上がPython 3 で相対インポートを使用すると「ImportError」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。