我有一个名为“ClassA”的Python类和另一个应该导入ClassA的Python类,它是“ClassB”。目录结构如下:
MainDir
../Dir
..../DirA/ClassA
..../DirB/ClassB
我如何使用sys.path
以便ClassB可以使用ClassA?
答案 0 :(得分:47)
作为' Python从父目录导入'问题的字面答案:
导入当前模块的父目录中的“mymodule”:
import os
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.sys.path.insert(0,parentdir)
import mymodule
修改的
遗憾的是,并不总是设置__file__
属性。
获取parentdir的更安全方法是通过inspect模块:
import inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
答案 1 :(得分:23)
您可以使用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
答案 2 :(得分:17)
你真的应该使用包。然后MainDir被放置在sys.path文件系统中的一个点上(例如... / site-packages),那么你可以在ClassB中说:
from MainDir.Dir.DirA import ClassA # which is actually a module
您只需在每个目录中放置名为__init__.py
的文件,使其成为包层次结构。