ホームページ >バックエンド開発 >Python チュートリアル >Python での「非パッケージで相対インポートが試行されました」エラーを回避するにはどうすればよいですか?

Python での「非パッケージで相対インポートが試行されました」エラーを回避するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-22 04:40:14628ブラウズ

How Can I Avoid the

Python の相対インポート

「非パッケージで相対インポートが試行されました」エラーを回避するには、Python の相対インポートを理解することが重要です。

スクリプト vs. Module

重要な違いは、Python ファイルのロード方法にあります。スクリプトとして直接実行すると、その名前は __main__ に設定されます。逆に、インポートされた場合、その名前にはパッケージ情報が含まれます。

命名規則

たとえば、package/subpackage1/moduleX.py 内の moduleX がインポートされる場合、その名前はpackage.subpackage1.moduleX になります。ただし、直接実行する場合、その名前は __main__ です。

相対インポート

相対インポートは、モジュールの名前に依存してパッケージ階層を決定します。名前にドットが含まれていないモジュールは、パッケージの一部として認識されません。

エラーの原因

このエラーは、名前にドットが含まれていないことを示すモジュールで相対インポートが試行されると発生します。パッケージには含まれていません (つまり、名前にドットがありません)。これには、スクリプト (main にドットがないため) と、現在のディレクトリから直接ロードされたモジュール (Python が現在のディレクトリを検索パスに追加する) が含まれます。

ソリューション

  • モジュールとして実行: を使用しますpython -m package.subpackage1.moduleX は moduleX をモジュールとして実行し、相対インポートを可能にします。
  • Place Elsewhere: moduleX を使用するスクリプトをパッケージ ディレクトリの外の場所に移動し、相対インポートを有効にします。それらの中でscripts.

Notes

  • パッケージ ディレクトリは Python の検索パスでアクセスできる必要があります。
  • Python 2.6 では、package 属性は、パッケージの解決にも影響します。モジュール。

以上がPython での「非パッケージで相対インポートが試行されました」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。