現在のディレクトリの上のディレクトリにあるファイルのクラスから継承したい。
そのファイルを相対的にインポートすることはできますか?
現在のディレクトリの上のディレクトリにあるファイルのクラスから継承したい。
そのファイルを相対的にインポートすることはできますか?
from ..subpkg2 import mod
Python ドキュメントによると: パッケージ階層内では、インポート ステートメントのドキュメントにあるように、2 つのドットを使用します。
インポートするモジュールを指定する場合、モジュールの絶対名を指定する必要はありません。モジュールまたはパッケージが別のパッケージに含まれている場合、パッケージ名を指定しなくても、同じ最上位パッケージ内で相対インポートを行うことができます。指定したモジュールまたはパッケージの後に先頭のドットを使用することで
from
、正確な名前を指定しなくても、現在のパッケージ階層を上に移動する高さを指定できます。先頭の 1 つのドットは、インポートを行うモジュールが存在する現在のパッケージを意味します。2 つのドットは、1 つ上のパッケージ レベルを意味します。3 つのドットは 2 レベル上にあるなどです。したがってfrom . import mod
、パッケージ内のモジュールから実行すると、pkg
インポートが終了し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の答えは正しいです。それができない場合 - あなたの本当の必要性があなたが表現したとおりであり、ディレクトリに排他的に結び付けられ、パッケージングとの必要な関係がない場合 -__file__
親ディレクトリを見つけるために作業する必要があります (いくつかのos.path.dirname
呼び出しで十分です; -)、次に (そのディレクトリがまだ on でない場合sys.path
) 先頭に一時的に上記のディレクトリを挿入します , の先頭にsys.path
、その__import__
ディレクトリを再度削除します -- 確かに面倒な作業ですが、「必要な場合は必要です」(そして Pyhon は次のように努力します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