Pythonic方式导入名称仅在运行时已知的模块?

时间:2014-09-19 20:50:27

标签: python dynamic python-module

给出以下文件夹结构:

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

如果我想访问global_functions.py或oakalleyit.py中的函数,但在运行之前我不知道函数或模块的名称,我该怎么做?

类似的东西:

from library import 'oakalleyit'

'oakalleyit'.'cleanup'()

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

1 个答案:

答案 0 :(得分:3)

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

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() function根据字符串值导入模块:

from importlib import import_module

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