关于python:导入模块的Pythonic方法,其名称仅在运行时已知?

Pythonic way to import module whose name is only known at runtime?

本问题已经有最佳答案,请猛点这里访问。

给定以下文件夹结构:

1
2
3
4
5
6
executioner/:
  - executioner.py
  - library/:
    - __init__.py
    - global_functions.py
    - oakalleyit.py

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

类似:

1
2
3
from library import 'oakalleyit'

'oakalleyit'.'cleanup'()

其中''表示它来自配置文件、cli参数等。


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

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

使用hashlib模块演示:

1
2
3
4
5
>>> import hashlib
>>> getattr(hashlib, 'md5')()
<md5 HASH object @ 0x1012a02b0>
>>> getattr(hashlib, 'sha1')()
<sha1 HASH object @ 0x1012a03f0>

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

1
2
3
4
from importlib import import_module

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