衝突がないはずなので、番号 2 を安全に使用できます。現在のパッケージと同じパッケージから常にモジュールをインポートします。モジュールが標準ライブラリ モジュールの 1 つと同じ名前の場合、標準モジュールの代わりにインポートされることに注意してください。ドキュメントから:
という名前のモジュールspam
がインポートされると、インタープリターは最初にその名前の組み込みモジュールを検索します。見つからない場合はspam.py
、変数で指定されたディレクトリのリストで指定されたファイルを検索しますsys.path
。sys.path
次の場所から初期化されます。
- 入力スクリプトを含むディレクトリ (または現在のディレクトリ)。
PYTHONPATH
(ディレクトリ名のリスト。
- シェル変数
PATH
)。
- インストールに依存するデフォルト。
初期化後、Python プログラムは を変更できsys.path
ます。実行中のスクリプトを含むディレクトリは、標準ライブラリ パスの前の検索パスの先頭に配置されます。これは、ライブラリ ディレクトリ内の同じ名前のモジュールの代わりに、そのディレクトリ内のスクリプトが読み込まれることを意味します。意図した置換でない限り、これはエラーです。詳細については、セクション標準モジュールを参照してください。
このオプションfrom mypackage.a import *
は、プロジェクト全体で一貫性の理由から使用できます。一部のモジュールでは、とにかく絶対インポートを行う必要があります。したがって、モジュールが同じパッケージに含まれているかどうかを考える必要はなく、プロジェクト全体で統一されたスタイルを使用するだけです。さらに、このアプローチはより信頼性が高く、予測可能です。
Python スタイル ガイドラインでは、相対インポートの使用は推奨されていません。
パッケージ内インポートの相対インポートはお勧めできません。すべてのインポートには、必ず絶対パッケージ パスを使用してください。PEP 328が Python 2.5 で完全に実装された今でも
、明示的な相対インポートのスタイルは積極的に推奨されていません。絶対インポートは移植性が高く、通常は読みやすいです。
Python 2.5 以降、パッケージ内相対インポートの新しい構文が導入されました。.
これで、現在のモジュールを..
参照し、1 レベル上にあるモジュールを参照できます。
from . import echo
from .. import formats
from ..filters import equalizer