一、概述

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

项目代码

./
├── 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. Makefile 中符合的使用

    1. $@: 表示规则中的目标文件集.在模式规则中,如果有多个目标,那么,"$@"就是匹配于 目标中模式定义的集合 2. $^  : 所有的依赖目标的集合.以空格分隔.如果在依赖目 ...

  2. WebApi中的参数传递

    在WebApi开发过程中,遇到一些客户端参数格式传输错误,经常被问到参数如何传递的一些问题,因此就用这篇博客做一下总结,肯定其它地方呢也有类似的一些文章,但是我还是喜欢通过这种方式将自己的理解记录下来 ...

  3. 开源项目练习EF+jQueryUI前后端分离设计

    最近大家流行把项目开源,我也来玩玩.只是开源公司项目不好,小弟只好从公司项目经验上另外弄出一套练习开源给大家. 这个项目可以做简单的团队任务系统(做一些简单的任务分配,没经过严格测试.功能单一别喷啊, ...

  4. cpu load过高问题排查

    load average的概念 top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载. 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少 ...

  5. HTML5的manifest 本地离线缓存

    下面直接放测试代码: index.html <!DOCTYPE html> <html manifest="m.manifest"> <head> ...

  6. 百度编辑器 Ueditor 如何增加模板 ?

    模板文件在这里: dialogs/template/config.js 参见:http://t.mreald.com/191 .

  7. VS设置以管理员方式运行

    一直以为VS不能直接以管理员方式运行,原来它是在高级里的.

  8. buildroot构建项目(二)--- u-boot 2017.11 建立 2440 开发板

    一.准备工作 在建立之前,先需要将下载的u-boot 拷贝一份出来解压,在此工程下进行更改和创建.同时根据前面搜索到的 mini2440开发板所在的版本,下载一份u-boot 拷贝出 mini2440 ...

  9. Linux 4.10.8 根文件系统制作(一)---环境搭建

    一.工具 制作工具为busybox 下载地址:https://busybox.net/ 解压: 二.制作文件系统 进入目录,执行make menuconfig: 2.1 busybox setting ...

  10. 记录一个PHP安装redis扩展时的问题

    安装过程:https://www.cnblogs.com/pengyunjing/p/8688320.html 由于我之前安装过该扩展,重新安装时没有执行make clean命令,所以安装好出现了下面 ...