相対インポートまたは絶対インポート
Python2.5 以降、より複雑な部分が実装されました。モジュールのインポートでは、絶対インポートまたはパッケージ相対インポートの使用を指定できます。計画は、絶対インポートを Python の他のバージョンのデフォルトにする詳細に進むことです。
次のようなパッケージ ディレクトリがあると仮定しましょう:
pkg というパッケージは上で定義されており、pkg.main と pkg.string の 2 つのサブモジュールが含まれています。 「main.py」のコードを考慮して、python2.4 以前のステートメント import string を実行するとどうなるでしょうか?パッケージ ディレクトリをクエリして相対インポートを実行し、pkg/string.py を見つけて、ファイルの内容を pkg.string モジュールとしてインポートします。このモジュールの境界名は、pkg 内の 'string' の名前空間です。メインモジュール。
pkg.string が必要な場合、これは素晴らしいことです。しかし、必要なものが Python の基本的な文字列モジュールだけである場合はどうなるでしょうか?
pkg.string を無視して基礎となるモジュールを見つける明確な方法はありません。通常は sys.modules の内容を確認する必要がありますが、これは少し不明確です。 Holger Krekel の py.std パッケージは、ベース ライブラリ import py;py.std.string.jion() からインポートを実行する優れた方法を提供しますが、そのパッケージは Python のインストール プロセス中には利用できません。
読者は string モジュールと pkg.string モジュールの使用を混同する可能性があるため、コードを読むと相対インポートの点でも十分に明確ではありません。 Python ユーザーは、ベース ライブラリと独自のパッケージ モジュールの間に異なる名前があることがすぐにわかりますが、新しいバージョンの Python では独自のサブモジュール名を保護することはできません。
Python2.5 からは、インポート動作をオンにして、 from __future__ importAbsolute_import を使用して絶対インポートに直接進むことができます。この絶対的なインポート動作は、Python の将来のバージョンではデフォルトの詳細となる予定です。絶対インポートがデフォルトに設定されると、インポート文字列は常にベース ライブラリを検索します。可能な限り絶対インポートを使用することをお勧めします。そのため、コード内で from pkg import 文字列を使用するのが適切です。 Python2.* バージョンでは必須:
例 1:
例: モジュール A.B.C:
.はカレントディレクトリ、..は上位ディレクトリ、...は上位ディレクトリを表します。
例 2:
ディレクトリ構造:
subpackage1/moduleX.py または subpackage1/__init__.py で次のようなモジュールをインポートできます:
from ...sys インポート パスは有効ですが、推奨されないことに注意してください。 SYS インポート パスから直接。