Импорт из каталога для сестер
У меня есть класс Python под названием ClassA и еще один класс Python, который должен импортировать ClassA, который является "ClassB". Структура каталогов выглядит следующим образом:
MainDir
../Dir
..../DirA/ClassA
..../DirB/ClassB
Как использовать sys.path
, чтобы ClassB мог использовать ClassA?
Ответы
Ответ 1
Вы действительно должны использовать пакеты. Затем MainDir помещается в точку файловой системы на sys.path(например,.../site-packages), тогда вы можете сказать в ClassB:
from MainDir.Dir.DirA import ClassA # which is actually a module
Вам просто нужно поместить файлы с именем __init__.py
в каждый каталог, чтобы сделать его иерархией пакетов.
Ответ 2
как литеральный ответ на вопрос " Импорт Python из родительского каталога":
для импорта '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)
Ответ 3
Вы можете использовать относительный импорт (пример из ссылки, текущий модуль - A.B.C
):
from . import D # Imports A.B.D
from .. import E # Imports A.E
from ..F import G # Imports A.F.G