目录/模块上的__import__没有返回所有文件/子模块?

时间:2014-01-09 23:40:22

标签: python python-2.7 python-import

我遇到了一个问题,我在模块上使用AttributeError时得到getattr()。错误读起来像这样。

File "/some_app/some_module/some_file.py", line 6, in inline_import
    cls = getattr(cls, package)
AttributeError: 'module' object has no attribute 'fileThatIsInDirectory'

事情是文件实际存在,但是当我在模块上打印__dict__.keys()时,它缺少了一些公平的模块,包括我想要的模块。该目录目前包含大约53个.py文件,但模块上只有24个属性。

包含.py文件的所有目录都包含一个空的__init__.py文件。

以下是一些有问题的代码示例。

def inline_import(class_path):
    package_path = class_path.split('.')
    cls = __import__(class_path.rsplit('.', 1)[0])
    package_path.pop(0)
    for package in package_path:
        cls = getattr(cls, package)
    return cls

您可以通过传递要导入的类的类路径来使用它,例如'module.file.ClassName'

我认为这可能与.pyc文件是否存在有关,但这不是问题。

1 个答案:

答案 0 :(得分:0)

导入包以使其所有模块可用是不够的。您的inline_import()函数可能已被调用,名称中的最后一个段是一个模块而不是一个类,例如module.file而不是module.file.ClassName

为避免混淆,请使用:(例如module.file:ClassName)分隔模块内的名称。它将明确指出应该导入哪些名称而不查看文件系统。