![](/img/trans.png)
[英]How to import package sub-modules in Python and avoid accidentally duplicating the module?
[英]__import__ on a directory/module is not returning all the files/sub-modules?
我遇到了在模块上使用getattr()
时出现AttributeError
的问题。 该错误显示如下内容。
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文件有关,但这不是问题。
导入软件包以使其所有模块可用都是不够的。 您的inline_import()
函数可能已被调用,名称中的最后一个段是模块而不是类,例如, module.file
而不是module.file.ClassName
。
为了避免混淆,请使用以下命令来分隔模块内部的名称:
例如module.file:ClassName
。 无需查看文件系统,就可以清楚地知道应导入哪些名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.