如何在Python中动态导入模块
如何在Python中动态导入模块
我试图根据文件名来导入文件,例如:\n
project / __init__.py log.py conf / __init__.py logger_settings.py other_settings.py
\n我想在conf/__init__.py
文件中实现类似以下的功能:\n
# -*- coding: utf-8 -*- # vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab import os import sys import json def get_settings(identity): """Settings.""" try: from i import * except ImportError as exc: raise Exception('导入配置时出错:%s' % exc)
\n然后在log.py
文件中,我可以像这样做:\n
#!/usr/bin/env python -u # -*- coding: utf-8 -*- # vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab import os import logging from project import conf CONF = conf.get_settings('logger_settings') def getLogger(identity ,log_file=CONF.log_file): # 然后访问CONF返回设置 # 例如: # host = CONF.host 会返回类似'localhost'的内容
\n我想要logger_settings.py
的内容如下:\n
log_file = '/mnt/logs/' host = 'localhost'
\n我需要如何修改conf/__init__.py
以实现这个目标?
Python中动态导入模块的问题由于需要根据运行时的值来给出模块的名称而出现。解决这个问题的方法是使用内置的__import__
函数和importlib
模块。
__import__
函数是Python的低级别的动态导入模块的方法。它接受一个字符串参数作为模块的名称,并返回导入的模块对象。下面是一个使用__import__
函数动态导入模块的例子:
import importlib settings = importlib.import_module('conf.%s' % i)
上述代码中,'conf.%s' % i
是一个根据运行时值动态生成的模块名称,importlib.import_module
函数会根据该名称导入对应的模块,并将导入的模块对象赋值给settings
变量。
除了__import__
函数,还可以使用importlib
模块来实现动态导入模块。importlib
模块提供了更高级别的接口来处理模块的导入。通过调用importlib.import_module
函数并传入模块的名称,可以实现动态导入模块。
需要注意的是,使用动态导入模块时,需要确保提供的模块名称是正确的,并且模块存在。否则,会导致导入失败的异常。
更多关于动态导入模块的详细信息可以查看Python官方文档的以下链接: