Python 多环境配置管理
一、概述
实际工程开发中常常会对开发、测试和生产等不同环境配置不同的数据库环境,传统方式可以通过添加不同环境的配置文件达到部署时的动态切换的效果。这种方式还不错,不过不同环境间往往会共享相同的配置而造成一些重复工作。
项目代码
./
├── conf.py
└── test.py
别看只有2个文件,实际情况是有十几个文件,这里只是举例而已!
conf.py 这个是配置文件,其他py文件都依赖于它

#!/usr/bin/env python3 # coding: utf-8 # 配置文件 # k8s信息######################################### # 开发环境#################### K8S_MASTER = "192.168.0.162" K8S_USERNAME = "root" K8S_PASSWD = "root" # # 生产环境#################### # K8S_MASTER = "10.0.0.167" # K8S_USERNAME = "root" # K8S_PASSWD = "abcd@1234"
test.py 测试文件,下面的代码时伪代码,仅供演示!

#!/usr/bin/env python3 # coding: utf-8 import conf def ssh2(ip,username,password,cmd): # 远程执行命令 print(ip,username,password,cmd) return True res = ssh2(conf.K8S_MASTER,conf.K8S_USERNAME,conf.K8S_PASSWD,"uptime") print(res)
需求
目前情况是,执行test.py,是这样的
python3 test.py
如果需要切换环境,要修改conf.py,将对应的变量注释掉即可!
但是如果变量过多,注释就太麻烦了!需要有一个变量,能够一键切换环境
二、改造配置文件
一键切换
conf.py

#!/usr/bin/env python3 # coding: utf-8 # 配置文件 import os class Config(object): # 默认配置 DEBUG = False # get attribute def __getitem__(self, key): return self.__getattribute__(key) class ProductionConfig(Config): # 生产环境 K8S_MASTER = "10.0.0.167" K8S_USERNAME = "root" K8S_PASSWD = "abcd@1234" class DevelopmentConfig(Config): # 开发环境 K8S_MASTER = "192.168.0.162" K8S_USERNAME = "root" K8S_PASSWD = "root" # 环境映射关系 mapping = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'default': DevelopmentConfig } # 一键切换环境 APP_ENV = os.environ.get('APP_ENV', 'default').lower() # 设置环境变量为default config = mapping[APP_ENV]() # 获取指定的环境
test.py 需要修改导入的模块
#!/usr/bin/env python3 # coding: utf-8 # import conf from conf import config as conf def ssh2(ip,username,password,cmd): # 远程执行命令 print(ip,username,password,cmd) return True res = ssh2(conf.K8S_MASTER,conf.K8S_USERNAME,conf.K8S_PASSWD,"uptime") print(res)
执行test.py,输出:
192.168.0.162 root root uptime
True
现在需要切换环境,直接修改 conf.py 的倒数第二行
APP_ENV = os.environ.get('APP_ENV', 'production').lower() # 设置环境变量为default config = mapping[APP_ENV]() # 获取指定的环境
再次执行test.py,输出:
10.0.0.167 root abcd@1234 uptime
True
脚本执行切换
改conf.py切换环境,不够灵活,需要执行脚本时,带一个参数,由这个参数来决定环境,比如:
python test.py dev
这样,就可以切换到开发环境!怎么做呢?
很简单,只需要修改conf.py即可!因为其他文件,都依赖于它
conf.py

#!/usr/bin/env python3 # coding: utf-8 # 配置文件 import os class Config(object): # 默认配置 DEBUG = False # get attribute def __getitem__(self, key): return self.__getattribute__(key) class ProductionConfig(Config): # 生产环境 K8S_MASTER = "10.0.0.167" K8S_USERNAME = "root" K8S_PASSWD = "abcd@1234" class DevelopmentConfig(Config): # 开发环境 K8S_MASTER = "192.168.0.162" K8S_USERNAME = "root" K8S_PASSWD = "root" # 环境映射关系 mapping = { 'dev': DevelopmentConfig, 'pro': ProductionConfig, 'default': DevelopmentConfig } # # 一键切换环境 # APP_ENV = os.environ.get('APP_ENV', 'production').lower() # 设置环境变量为default # config = mapping[APP_ENV]() # 获取指定的环境 # 根据脚本参数,来决定用那个环境配置 import sys # print(sys.argv) num = len(sys.argv) - 1 #参数个数 if num < 1 or num > 1: exit("参数错误,必须传环境变量!比如: python xx.py dev|pro|default") env = sys.argv[1] # 环境 # print(env) APP_ENV = os.environ.get('APP_ENV', env).lower() config = mapping[APP_ENV]() # 实例化对应的环境
再次执行test.py
python test.py
输出:
参数错误,必须传环境变量!比如: python xx.py dev|pro|default
切换到开发环境
python test.py dev
输出:
192.168.0.162 root root uptime
True
切换到生产环境
输出:
10.0.0.167 root abcd@1234 uptime
True
本文参考链接:
分类:
python 运维开发
标签:
运维开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix