文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 多环境配置管理

2023-01-31 08:23

关注

实际工程开发中常常会对开发、测试和生产等不同环境配置不同的数据库环境,传统方式可以通过添加不同环境的配置文件达到部署时的动态切换的效果。这种方式还不错,不过不同环境间往往会共享相同的配置而造成一些重复工作。

 

项目代码

./
├── 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

 

 

本文参考链接:

https://blog.yuanbin.me/posts/2018-02/2018-02-24_16-30-16/


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯