2013-12-17 32 views
3

我做的Python __import__只给我顶层模块

module = __import__("client.elements.gui.button", globals(), locals(), [], 0) 

但它只是返回client

我的问题是什么?

+2

对于Python 2.7或更高版本,可以使用['importlib.import_module()'](HTTP://文档。 python.org/2/library/importlib.html#importlib.import_module)。 –

回答

3

接受的答案是正确的,但如果你在文档阅读,你会发现,这可能与周围被得到公认的一个令人不安的“黑客”利用__import__像这样:

module = __import__('client.elements.gui.button', fromlist=['']) 

一点也没有” t真的很重要,只要它是非空列表,你通过fromlist。这表示您想要执行from x.y.z import foo样式导入的默认__import__实现,并且返回您之后的模块。

如上所述,您应该使用importlib来代替,但如果您需要支持Python版本< 2.7,这仍然是一种解决方法。

+0

真的很有意思,很好的补充答案。 – Drake

2

只获得顶级水平,但你也可以解决此像这样:

module_name = 'some.module.import.class' 
    module = __import__(module_name) 
    for n in module_name.split('.')[1:]: 
     module = getattr(module, n) 

# module is now equal to what would normally 
# have been retrieved where you to properly import the file 
相关问题