有没有办法动态导入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