一、概述

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

项目代码

./
├── 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. 面向对象【day08】:静态方法、类方法、属性方法(九)

    本节内容 概述 静态方法 类方法 属性方法 总结 一.概述 前面我们已经讲解了关于类的很多东西,今天讲讲类的另外的特性:静态方法(staticmethod).类方法(classmethod).属性方法 ...

  2. Spark记录-Scala基础程序实例

    object learn { def main(args:Array[String]):Unit={ println("请输入两个数字:") var a:Int=Console.r ...

  3. jquery blockui 遮罩【转】

    参考 : http://bookshadow.com/weblog/2014/09/26/jquery-blockui-js-introduction/ blockUI.html blockUI.ht ...

  4. Neural Networks and Deep Learning(week4)Deep Neural Network - Application(图像分类)

    Deep Neural Network for Image Classification: Application 预先实现的代码,保存在本地 dnn_app_utils_v3.py import n ...

  5. Spring RedisTemplate操作-序列化性能测试(12)

    @Autowired @Qualifier("redisTemplate") private RedisTemplate<String, String> stringr ...

  6. python学习笔记8--面向对象--属性和方法详解

    属性: 公有属性  (属于类,每个类一份) 普通属性  (属于对象,每个对象一份) 私有属性    (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法:(按作用) 构造方法 析构函数 方法: ...

  7. keepalive+nginx 热备跟负载均衡

    结构图 keepalived配置 master跟backup除了state跟优先级,其它一样,优先级master需大于backup ! Configuration File for keepalive ...

  8. Table Dragger - 简单的 JS 拖放排序表格插件

    Table Dragger 是一个极简的实现拖放排序的表格插件,纯 JavaScript 库,不依赖 jQuery.用于构建操作方便的拖放排序功能,超级容易设置,有平滑的动画,支持触摸事件. 在线演示 ...

  9. 停靠窗口QDockWidget

    停靠窗口QDockWidget要和QMainWindow一起搭配使用的 样式: import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets ...

  10. js设置div透明度

    原生js设置透明度 为了兼容IE与其他浏览器对透明度的设置,我们需要对以上两种样式分别进行设置: 复制代码代码如下: var alpha = 30; //透明度值变量 var oDiv = docum ...