一、概述

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

项目代码

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

Python 多环境配置管理的更多相关文章

  1. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  2. Python黑帽编程1.2 基于VS Code构建Python开发环境

    Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...

  3. Eclipse中Python开发环境搭建

    Eclipse中Python开发环境搭建  目 录  1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...

  4. ubuntu上用eclipse搭建java、python开发环境

    上一篇文章讲到如何在windwos上用eclipse搭建java.python开发环境,这一讲将关注如何在ubuntu上实现搭建,本人使用虚拟机安装的ubuntu系统,系统版本为:14.04 lts ...

  5. windows 下用eclipse搭建java、python开发环境

    本人只针对小白!本文只针对小白!本文只针对小白! 最近闲来无事,加上之前虽没有做过eclipse上java.python的开发工作,但一直想尝试一下.于是边查找资料边试验,花了一天时间在自己的机器上用 ...

  6. 【转】使用Eclipse搭建Python开发环境

    因为要进行自动化测试,所以要搭建Python开发环境.这里将使用Eclipse+pyDev进行搭建,在此作为笔记记录下来. 需要的组件: 1.Eclipse SDK 3.7(这里将不再叙述Eclips ...

  7. python学习之python开发环境搭建

    Python简介 Python是一种面向对象.解释型计算机程序设计语言.Python语法简洁而清晰,具有丰富和强大的类库等等众多的特性,这是来自百度百科的介绍,在百度百科还能看到它的更详细的介绍信息, ...

  8. 在Ubuntu下配置舒服的Python开发环境

    Ubuntu 提供了一个良好的 Python 开发环境,但如果想使我们的开发效率最大化,还需要进行很多定制化的安装和配置.下面的是我们团队开发人员推荐的一个安装和配置步骤,基于 Ubuntu 12.0 ...

  9. kali linux Python开发环境初始化

    kali linux Python 黑客编程1 开发环境初始化 为什么要选择Python? Python作为目前Linux系统下最流行的编程语言之一,对于安全工作者的作用可以和C++相提并论.Pyth ...

随机推荐

  1. Hadoop生态圈-HUE环境部署

    Hadoop生态圈-HUE环境部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.HUE简介 1>.HUE的由来 HUE全称是HadoopUser Experienc ...

  2. python---redis的python使用

    set以及相关: r.set("foo","bar") print(r.get("foo"))#b'bar' #在Redis中设置值,默认, ...

  3. python---自定义字段验证

    各个字段类,含正则和验证方法 #字段类 class IPField: REGULAR = "^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4] ...

  4. java日期相关

    JAVA中获得一个月最大天数的方法 参考博客:http://www.cnblogs.com/relucent/p/4566582.html Calendar 类是一个抽象类,为日历字段之间的转换提供了 ...

  5. go switch

    go switch无需写break 写法1: func main() { var a int fmt.Scanf("%d\n", &a) switch a { case 1 ...

  6. CodeForces - 348D Turtles(LGV)

    https://vjudge.net/problem/CodeForces-348D 题意 给一个m*n有障碍的图,求从左上角到右下角两条不相交路径的方案数. 分析 用LGV算法.从(1,1)-(n, ...

  7. 牛客多校第十场-D- Rikka with Prefix Sum

    链接:https://www.nowcoder.com/acm/contest/148/D来源:牛客网 Prefix Sum is a useful trick in data structure p ...

  8. ubuntu配置lua环境,并进行c与lua的相互调用

    1.安装lua环境 先查看一下apt可获取的lua版本 我们选择lua5.1版本进行安装 sudo apt install lua5.1 安装完之后测试一下是否安装成功,如果可以正常使用,则lua环境 ...

  9. 选择排序算法的JAVA实现

    1,采用选择排序对元素进行排列时,元素之间需要进行比较,因此需要实现Comparable<T>接口.即,<T extends Comparable<T>>. 更进一 ...

  10. Storm WordCount Topology学习

    1,分布式单词计数的流程 首先要有数据源,在SentenceSpout中定义了一个字符串数组sentences来模拟数据源.字符串数组中的每句话作为一个tuple发射.其实,SplitBolt接收Se ...