268

現在のディレクトリの上のディレクトリにあるファイルのクラスから継承したい。

そのファイルを相対的にインポートすることはできますか?

4

9 に答える 9

206

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は、絶対/相対インポートを扱います。

于 2009-06-28T05:01:14.617 に答える
160
import sys
sys.path.append("..") # Adds higher directory to python modules path.
于 2012-06-19T08:06:11.173 に答える
93

彼が言及しているパッケージ階層を保証できる場合、 @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
于 2009-06-28T05:07:01.427 に答える
29

現在のディレクトリのちょうど 1 レベル上にあるディレクトリからモジュールをインポートします。

from .. import module
于 2014-04-16T08:05:59.387 に答える