ホームページ > バックエンド開発 > Python チュートリアル > Python が「非パッケージでの相対インポート」エラーをスローするのはなぜですか?

Python が「非パッケージでの相対インポート」エラーをスローするのはなぜですか?

Susan Sarandon
リリース: 2024-12-23 16:31:10
オリジナル
369 人が閲覧しました

Why Does Python Throw a

Python の相対インポート: 「非パッケージ」エラーについて

「非パッケージで相対インポートが試行されました」という普遍的な問題これは、スクリプトとモジュールの区別と、実行中のそれぞれの動作の誤解に起因します。 import.

スクリプトとモジュール

Python ファイルが直接実行されると、それはトップレベルのスクリプトとして機能し、「__main__」という名前が割り当てられます。インポートすると、ファイルの名前は、ドットで区切られたパッケージ名の後にファイル名が続きます。

相対インポートとパッケージ

相対インポートでは、モジュールの名前を使用してモジュールを見つけます。パッケージ階層内の位置。ただし、モジュール名にパッケージ情報 (例: "__main__") が含まれていない場合、実際のファイルの場所に関係なく、相対インポートは最上位モジュールであるかのように解決されます。

「非パッケージ」エラー

このエラーは、パッケージの一部として認識されないモジュール内で相対インポートが試行されたときに発生します。これは、モジュール名にドットが含まれておらず、非パッケージ ステータスを示している場合に発生する可能性があります。

解決策

エラーを解決するには、次のアプローチを検討してください。

  • -m スイッチの使用:
    モジュールをモジュール (スクリプトではなく) として実行するには、構文「python -m package.subpackage1.moduleX」を使用します。
  • スクリプトを移動します:
    次のような別のスクリプトを作成します。目的のモジュールを使用し、そのスクリプトをパッケージ ディレクトリの外部から実行します。これにより、モジュール名への「__main__」の割り当てが回避され、相対インポートが可能になります。

追加メモ:

  • パッケージ ディレクトリにアクセスできることを確認してください。モジュール検索パス (sys.path) 内。
  • Python 2.6 以降、パッケージ解決のためのモジュールの「名前」には、package 属性と name 属性の両方が含まれます。

以上がPython が「非パッケージでの相対インポート」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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