"ClassA"と呼ばれるPythonクラスと "ClassB"であるClassAをインポートする別のPythonクラスがあります。次のようなディレクトリ構造は次のとおりです。兄弟ディレクトリからインポート
MainDir
../Dir
..../DirA/ClassA
..../DirB/ClassB
ClassBのはにClassAを使用できるように、どのように私はsys.path
使うのでしょうか?
"ClassA"と呼ばれるPythonクラスと "ClassB"であるClassAをインポートする別のPythonクラスがあります。次のようなディレクトリ構造は次のとおりです。兄弟ディレクトリからインポート
MainDir
../Dir
..../DirA/ClassA
..../DirB/ClassB
ClassBのはにClassAを使用できるように、どのように私はsys.path
使うのでしょうか?
あなたは本当にパッケージを使用する必要があります。その後MAINDIR(例えば... /のsite-packages)のsys.path上のファイルシステム内のポイントに設置され、その後、あなたはClassBので言うことができます:
from MainDir.Dir.DirA import ClassA # which is actually a module
あなただけのそれぞれにおける__init__.py
という名前のファイルを配置する必要がありますディレクトリをパッケージ階層にします。 「親ディレクトリからPythonのインポート」質問への答えとしてリテラル
あなたはrelative import(リンク、現在のモジュールからの例 - A.B.C
)を使用することができます。
from . import D # Imports A.B.D
from .. import E # Imports A.E
from ..F import G # Imports A.F.G
:
あなたの現在のモジュールの親ディレクトリにある 『のmymodule』をインポートする:
import os
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.sys.path.insert(0,parentdir)
import mymodule
編集 残念ながら__file__
属性は設定されていません。それは相対的な輸入を呼ばれています
import inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
これは私を助けました。 – odigity
Remi - 文字通りの答えをありがとう。私はこれがPythonアプリケーションのテストコードを書くときに便利だとわかりました。私はサブディレクトリにテストコードを置くことができ、既存のプロジェクトを変更せずにテストを実行することができます。 (言い換えれば、既存のコードをモジュールに変換してからテストを実行するのは、バグを作業コードに導入するリスクを管理するという観点からは不適切です)モジュールパスを変更する方法は便利です。 –
それだけで動作する唯一のものです、ありがとう! –
とgoogleable材料とSOの質問のかなりのビットを持っていますparentdirを取得する Aより安全な方法は、検査モジュールを介してです。 – delnan
http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder – jgritty