【发布时间】:2010-02-01 18:57:30
【问题描述】:
>>> import_path('os.path.join')
<function join at 0x22d4050>
编写import_path(在 Python 2.6 及更高版本中)的最简单方法是什么?假设 last 组件始终是模块/包中的可调用组件。
【问题讨论】:
标签: python import module introspection
>>> import_path('os.path.join')
<function join at 0x22d4050>
编写import_path(在 Python 2.6 及更高版本中)的最简单方法是什么?假设 last 组件始终是模块/包中的可调用组件。
【问题讨论】:
标签: python import module introspection
这似乎是你想要的:
def import_path(name):
modname, _, attr = name.rpartition('.')
if not modname:
# name was just a single module name
return __import__(attr)
m = __import__(modname, fromlist=[attr])
return getattr(m, attr)
要使其适用于 Python 2.5 及更早版本,其中 __import__ 不接受关键字参数,您需要使用:
m = __import__(modname, {}, globals(), [attr])
【讨论】:
显然以下工作:
>>> p = 'os.path.join'
>>> a, b = p.rsplit('.', 1)
>>> getattr(__import__(a, fromlist=True), b)
<function join at 0x7f8799865230>
【讨论】:
fromlist参数吗?
试试
def import_path(name):
(mod,mem) = name.rsplit('.',1)
m = __import__(mod, fromlist=[mem])
return getattr(m, mem)
至少适用于
>>> import_path('os.walk')
<function walk at 0x7f23c24f8848>
现在
>>> import_path('os.path.join')
<function join at 0x7f7fc7728a28>
【讨论】: