如何导入上面的目录中的Python类?

我想从位于当前目录之上的文件中的类inheritance。

是否有可能相对导入该文件?

在包层次结构中,使用两个点,如导入语句 doc所示:

指定要导入的模块时,不必指定模块的绝对名称。 当一个模块或包被包含在另一个包中时,可以在相同的顶层包中进行相对导入,而不必提及包名。 通过在指定的模块或包之后使用前导点,可以指定向上遍历当前包层次结构的高度,而不指定确切的名称。 一个引导点意味着导入模块存在的当前包。 两点意味着一个包级别 。 三个点是两个级别,所以如果你执行from . import modpkg包中的模块from . import mod ,然后您将最终导入pkg.mod 。 如果from ..subpkg2 import mod内的from ..subpkg2 import mod执行from ..subpkg2 import mod则将导入pkg.subpkg2.mod 。 相对import的规格包含在PEP 328中 。

PEP 328涉及绝对/相对import。

@ gimel的答案是正确的, 如果你能保证他提到的包层次结构。 如果你不能 – 如果你真正的需求是你所expression的,只与目录绑定,而且与包装没有任何必要的关系 – 那么你需要在__file__上找出父目录(几个os.path.dirname调用会做;-),然后(如果该目录不是已经在sys.path )prepend临时插入所述目录在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 
 import sys sys.path.append("..") # Adds higher directory to python modules path. 
 from .. import module # Import module from a higher directory. 

我相信,当你的代码全部包含在一个模块中的时候,你总是可以引用这个模块作为顶级命名空间。

 foo/ __init__.py bar/ __init__.py baz/ __init__.py 

 foo/baz/__init__.py #!/usr/bin/env python2 import foo # or from foo import bar