39

我有一个名为“ClassA”的 Python 类和另一个应该导入 ClassA 的 Python 类,即“ClassB”。目录结构如下:

MainDir
../Dir
..../DirA/ClassA
..../DirB/ClassB

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

4

3 回答 3

51

作为对“从父目录导入 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)
于 2012-03-21T13:54:44.197 回答
30

您可以使用相对导入(来自链接的示例,当前模块 - A.B.C):

from . import D                 # Imports A.B.D
from .. import E                # Imports A.E
from ..F import G               # Imports A.F.G
于 2010-12-27T22:47:26.430 回答
17

你真的应该使用包。然后将 MainDir 放在文件系统中 sys.path 上的某个点(例如 .../site-packages),然后您可以在 ClassB 中说:

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

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

于 2010-12-27T22:57:20.327 回答