現在のディレクトリより上のディレクトリにあるファイルのクラスを継承したい。
そのファイルを比較的インポートすることは可能ですか?
import statement docが示すように、パッケージ階層内で2つのドットを使用します。
インポートするモジュールを指定する場合、モジュールの絶対名を指定する必要はありません。モジュールまたはパッケージが別のパッケージに含まれている場合、パッケージ名を指定せずに、同じトップパッケージ内で相対的なインポートを行うことができます。
from
の後に指定されたモジュールまたはパッケージの先頭のドットを使用することにより、正確な名前を指定せずに現在のパッケージ階層を上に移動する高さを指定できます。 1つの先頭のドットは、インポートを行うモジュールが存在する現在のパッケージを意味します。 2つのドットは、1つ上のパッケージレベルを意味します。 3つのドットは2レベル上にあります。したがって、pkg
パッケージのモジュールからfrom . import mod
を実行すると、pkg.mod
をインポートすることになります。from ..subpkg2 import mod
内からpkg.subpkg1
を実行すると、pkg.subpkg2.mod
をインポートします。相対的なインポートの仕様は、 PEP 328 に含まれています。
PEP 328 絶対/相対インポートを処理します。
import sys
sys.path.append("..") # Adds higher directory to python modules path.
@gimelの答えは正しいですif彼が言及したパッケージ階層を保証できます。できない場合-あなたの本当のニーズがあなたが表現したとおりで、ディレクトリに排他的に関連付けられており、パッケージングとの必要な関係がない場合-あなたは親ディレクトリを見つけるために__file__
に取り組む必要がありますof os.path.dirname
の呼び出しが行われます;-)、その後(そのディレクトリがsys.path
にない場合)、sys.path
、__import__
の先頭に、上記のディレクトリを一時的に追加します。前述のディレクトリを削除します-本当に面倒な作業ですが、「あなたがしなければならないとき、あなたはしなければなりません」(そしてPyhonは、プログラマーが must ISO C規格は、序文の「Cの精神」セクションで述べています!-)。
以下があなたに役立つかもしれない例です:
import sys
import os.path
sys.path.append(
os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
import module_in_parent_dir
現在のディレクトリの1つ上のレベルにあるディレクトリからモジュールをインポートします。
from .. import module