如何在其他文件中找到要导入的类的完整模块路径

2024-10-03 00:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个方法,返回给定类名的模块路径

def findModulePath(path, className):
    attributes = []
    for root, dirs, files in os.walk(path):
        for source in (s for s in files if s.endswith(".py")):
            name = os.path.splitext(os.path.basename(source))[0]
            full_name = os.path.splitext(source)[0].replace(os.path.sep, '.')
            m = imp.load_module(full_name, *imp.find_module(name, [root]))
            try:
                attr = getattr(m, className)
                attributes.append(attr)
            #                if "." in attr.__module__:
            #                    return

            except:
                pass
    if len(attributes) <= 0:
        raise Exception, "Class %s not found" % className

    for element in attributes:
        print "%s.%s" % (element.__module__, className)

但它不返回模块的完整路径, 例如,我在objects包中有一个名为“objectmodel”的python文件,它包含一个Model类,所以我调用findModulePath(MyProjectPath,“Model”)。它印出来了对象模型.模型但我需要objects.objectmodel.Model在


Tags: 模块pathnamein路径sourceformodel
1条回答
网友
1楼 · 发布于 2024-10-03 00:26:51

您要查找的属性是__file__。注意,在得到这个值之后,您可能需要对它进行一些处理-它可以是.py.pyc.pyd.so.dll,等等

当然,这也是一个完整的路径,但是你有你的根,你可以减去你关心的实际层次结构。在

相关问题 更多 >