如何将config.ini文件的自定义路径注入到Python模块的对应变量中
核心问题说明
你当前的代码在模块导入阶段(执行import my_module时)就直接运行了读取config.ini的逻辑,此时你还没来得及修改配置路径变量,自然会直接抛出文件不存在的错误。核心解决思路是把配置文件的读取逻辑延迟到第一次真正使用配置的时候执行,不要放在模块顶层。
可行实现方案
方案1:懒加载配置(最小改法)
修改my_module/__init__.py代码如下:
# 模块顶层仅定义默认路径,不执行任何配置读取操作 _config_file = 'config.ini' _config = None def set_config_ini_file_full_path(config_file: str): """设置自定义配置文件路径,需要在使用模块其他功能前调用""" global _config_file, _config _config_file = config_file _config = None # 路径变更后清空已有缓存,下次读取会重新加载 def _get_config(): """内部工具函数,第一次调用时才实际加载配置文件""" global _config if _config is None: import configparser _config = configparser.ConfigParser() if not _config.read(_config_file, encoding='utf-8'): raise FileNotFoundError(f"配置文件不存在: {_config_file}") return _config # 原有代码中直接读取config_file的逻辑,全部替换为调用_get_config()获取配置对象 # 示例:读取section下的key配置项写法为 _get_config().get("section", "key")
调用端myscript.py用法:
import my_module # 先设置自定义配置路径,再调用模块的其他功能 my_module.set_config_ini_file_full_path('some_location/config.ini') # 之后正常使用模块提供的函数即可,第一次使用时会自动加载配置
方案2:配置单例类(适合配置逻辑复杂的场景)
如果你的配置有扩展需求(比如热更新、多配置文件合并等),可以用单例类封装配置逻辑,可维护性更高:
class ConfigManager: _instance = None _config_file = 'config.ini' _config = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super().__new__(cls, *args, **kwargs) return cls._instance def set_config_path(self, config_file: str): self._config_file = config_file self._config = None def get_config(self): if self._config is None: import configparser self._config = configparser.ConfigParser() if not self._config.read(self._config_file, encoding='utf-8'): raise FileNotFoundError(f"配置文件不存在: {self._config_file}") return self._config # 对外暴露快捷方法 config_manager = ConfigManager() set_config_ini_file_full_path = config_manager.set_config_path # 模块内部读取配置时调用 config_manager.get_config() 即可
调用端用法和方案1完全一致。
内容的提问来源于stack exchange,提问作者Dinesh Ravi
相关产品推荐
相关产品推荐

