关于python:从同级目录导入

Import from sibling directory

我有一个叫做"class a"的python类和另一个应该导入"classb"的class a类的python类。目录结构如下:

1
2
3
4
MainDir
../Dir
..../DirA/ClassA
..../DirB/ClassB

我如何使用sys.path,以便ClassB可以使用ClassA?


作为"从父目录导入python"问题的文本答案:

要导入当前模块的父目录中的"mymodule",请执行以下操作:

1
2
3
4
import os
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.sys.path.insert(0,parentdir)
import mymodule

编辑不幸的是,并不总是设置__file__属性。获取parentdir的更安全的方法是通过inspect模块:

1
2
3
import inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)


您可以使用相对导入(例如,从链接,当前模块-EDOCX1[0]):

1
2
3
from . import D                 # Imports A.B.D
from .. import E                # Imports A.E
from ..F import G               # Imports A.F.G


你真的应该使用软件包。然后将maindir放在sys.path文件系统的某个点上(例如…/site packages),然后在B类中说:

1
from MainDir.Dir.DirA import ClassA # which is actually a module

您只需在每个目录中放置名为__init__.py的文件,就可以使其成为包层次结构。