用Python方式导入仅在运行时知道名称的模块? [重复]

最后发布: 2014-09-19 20:50:26


问题

这个问题已经在这里有了答案:

给定以下文件夹结构:

executioner/:
  - executioner.py
  - library/:
    - __init__.py
    - global_functions.py
    - oakalleyit.py

如果我想访问global_functions.py或oakalleyit.py中的函数,但是直到运行时我才知道函数或模块的名称,我该怎么做?

就像是:

from library import 'oakalleyit'

'oakalleyit'.'cleanup'()

''表示它来自配置文件,CLI参数等。

python dynamic python-module
回答

您可以使用getattr()函数动态访问名称。 这包括模块对象:

import library
getattr(library, 'oakalleyit')()

使用hashlib模块进行演示:

>>> import hashlib
>>> getattr(hashlib, 'md5')()
<md5 HASH object @ 0x1012a02b0>
>>> getattr(hashlib, 'sha1')()
<sha1 HASH object @ 0x1012a03f0>

如果需要动态模块访问,则需要使用importlib.import_module()函数根据字符串值导入模块:

from importlib import import_module

module = import_module('library.oakalleyit')
getattr(module, 'some_function_name')()