ホームページ > バックエンド開発 > Python チュートリアル > Python スクリプトを直接実行すると相対インポートが失敗するのはなぜですか?

Python スクリプトを直接実行すると相対インポートが失敗するのはなぜですか?

Patricia Arquette
リリース: 2024-12-22 12:43:11
オリジナル
575 人が閲覧しました

Why Do Relative Imports Fail When Running Python Scripts Directly?

非パッケージ スクリプトで相対インポートが失敗する理由

問題の定義:

Python ファイルから相対インポートを試行する場合最上位スクリプトとして実行されると (例: python myfile.py と入力して)、エラー メッセージが表示されます。 「非パッケージで相対インポートを試行しました。」

モジュールとスクリプトの理解:

主な違いは、Python がロード時にファイルを解釈する方法にあります。スクリプトとして直接実行すると、ファイルの名前は「__main__」になります。別のファイルからモジュールとしてインポートされる場合、その名前はそのパッケージ構造を反映します (例: 「package.subpackage.module」)。

相対インポート制限:

相対インポートは、モジュールのフルネームに基づいてパッケージ階層内での位置を決定します。モジュール名にパッケージ情報 (例: "__main__") が含まれていない場合、モジュールはパッケージの一部とみなされないため、相対インポートは失敗します。

エラー説明:

モジュールのフルネームにドットがなく、パッケージの関連付けがないことを示す場合、Python はそれをスタンドアロン スクリプト、および相対インポートは無効になります。このエラーは、次の場合に発生します。

  1. 「-m」オプションを使用せずにスクリプトとして直接実行されたファイル内で相対インポートを試みた場合。
  2. Python インタープリターが存在する現在のディレクトリからファイルをインポートした場合が実行中であるため、Python がモジュールを時期尚早に識別してしまう可能性があります。スタンドアロン。

解決策:

  1. モジュールとしてスクリプトを実行: ロードするには python -m package.subpackage.moduleX を使用します。スクリプトをモジュールとして、そのパッケージの関連付けを保持し、相対的なimports.
  2. スクリプトとモジュールを分離する: スクリプトをパッケージの外の別のディレクトリに移動し、そこからインポートすると、相対インポートが機能できるようになります。

追加メモ:

  • パッケージ ディレクトリは、内容への信頼性の高いアクセスのための Python モジュール検索パス (sys.path)。
  • Python 2.6 以降、モジュールの「名前」は namepackage 属性。

以上がPython スクリプトを直接実行すると相対インポートが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート