如何导入上面的目录中的Python类?
我想从位于当前目录之上的文件中的类inheritance。
是否有可能相对导入该文件?
在包层次结构中,使用两个点,如导入语句 doc所示:
指定要导入的模块时,不必指定模块的绝对名称。 当一个模块或包被包含在另一个包中时,可以在相同的顶层包中进行相对导入,而不必提及包名。 通过在指定的模块或包之后使用前导点,可以指定向上遍历当前包层次结构的高度,而不指定确切的名称。 一个引导点意味着导入模块存在的当前包。 两点意味着一个包级别 。 三个点是两个级别,所以如果你执行
from . import mod
从pkg
包中的模块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