有没有办法动态导入Python对象?

有没有办法动态导入Python对象?,python,python-3.x,Python,Python 3.x,我正在尝试创建一个命令处理程序,下面是一些代码: from importlib import import_module from os import path, listdir client.commands = [] # where the commands are stored directory = '.\\src\\exec\\files' for command in listdir(directory): filepath = path.join(directory, f

我正在尝试创建一个命令处理程序,下面是一些代码:

from importlib import import_module
from os import path, listdir

client.commands = [] # where the commands are stored
directory = '.\\src\\exec\\files'
for command in listdir(directory):
    filepath = path.join(directory, filename)
    if path.isdir(filepath) and 'lib' not in filepath: # check if file is a directory
        log_commands(directory=filepath) # make recursive logging

    elif filename.endswith('.py'):
        command_name = filename.split('\\')[-1]
        module_name = devutils.filepath2module(filepath, True, True) # convert file path to module path
        client_utils.commands[command_name] = import_module(module_name) # puts module in a new item
代码工作正常,但import_module函数只导入整个函数。我想知道是否有从模块导入特定对象的库,如:

from module import object

但在一个动态的方式,我搜索了一点,没有找到任何东西。(抱歉英语不好)

来自module import foo
相当于
foo=\uuuu import\uuuu('module')。foo
。它必须运行整个文件才能创建模块对象

但是,
importlib.import\u模块
更易于使用(尤其是对于子模块),因此

foo = import_module('module').foo
如果属性访问也需要是动态的,那么可以使用
getattr
,因此

def from_module_get(module_name, attr):
    return getattr(import_module(module_name), attr)
始终导入整个模块。您可以选择仅从全局命名空间提取名称,因为对象的类型与此无关
>>> from_module_get('math', 'tau')
6.283185307179586