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"

View Code

test.py 测试文件,下面的代码时伪代码,仅供演示!

#!/usr/bin/env python3
# coding: utf-8import confdef ssh2(ip,username,password,cmd):  # 远程执行命令print(ip,username,password,cmd)return Trueres = ssh2(conf.K8S_MASTER,conf.K8S_USERNAME,conf.K8S_PASSWD,"uptime")
print(res)

View Code

需求

目前情况是,执行test.py,是这样的

python3 test.py

如果需要切换环境,要修改conf.py,将对应的变量注释掉即可!

但是如果变量过多,注释就太麻烦了!需要有一个变量,能够一键切换环境

二、改造配置文件

一键切换

conf.py

#!/usr/bin/env python3
# coding: utf-8
# 配置文件
import osclass Config(object):  # 默认配置DEBUG = False# get attributedef __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]()  # 获取指定的环境

View Code

test.py 需要修改导入的模块

#!/usr/bin/env python3
# coding: utf-8# import conf
from conf import config as confdef ssh2(ip,username,password,cmd):  # 远程执行命令print(ip,username,password,cmd)return Trueres = 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 osclass Config(object):  # 默认配置DEBUG = False# get attributedef __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]()  # 实例化对应的环境

View Code

再次执行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/

posted @ 2019-01-22 17:15 肖祥 阅读(...) 评论(...) 编辑 收藏

Python 多环境配置管理相关推荐

  1. python安装包_迈出Python学习第一步:Python开发环境的下载与安装

    所谓"磨刀不误砍柴工"."工欲善其事,必先利其器",都在告诉我们一个道理:要做好一个事情,事先做好充分的准备工作是非常重要的.所以在我们正式学习用Python编 ...

  2. “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境

    Visual Studio Code 免费跨平台文本编辑器,插件资源丰富,我把其作为Debug的首选. 下载地址:https://code.visualstudio.com/Download 安装之后 ...

  3. mac搭建python开发环境_Mac中基于Homebrew搭建python开发环境

    转移到mac上了.这里是在lion中搭建python开发环境的简单记录.这份记录不是一份step by step.而是事后写的记录,可能有记忆遗漏.如果有错误,请指正. 1.安装homebrew的准备 ...

  4. Windows 10 搭建Python开发环境(PyCharm )

    Windows 10 搭建Python开发环境(PyCharm ) 一.安装Python3 二.安装Pycharm 怎么使用PyCharm编写Python程序,简单教程. windows下安装pyth ...

  5. 拒绝conda, 用virtualenv构建多版本的python开发环境

    本文章转载自公众号 "生信码农笔记(ID:bio-coder)",已获得原作者授权. 1. 不喜欢用 conda 特别不喜欢 bioconda, miniconda, Anacon ...

  6. geany配置python_Linux系统下搭建基于Geany+Python开发环境

    Linux系统下搭建基于Geany+Python开发环境 一.升级python mkdir /usr/local/python3 # tar xvf Python-3.6.1.tar.xz # 解压文 ...

  7. selenium + python自动化测试环境搭建

    elenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选selenium ,相因为它相比QTP有诸多有点: 免费,也不用再为破解QTP而大伤脑筋 小巧,对于不同的语言它只是一个包 ...

  8. atom配置python环境_Win10如何配置Python的环境变量

    相信有许多人遇到过这样的一个问题,为什么电脑里安装了python,可是win10终端里输入"python"却显示不是内部命令无法.其实是系统的环境变量没有配置所以输入"p ...

  9. ubuntu体验python_在Ubuntu下配置舒服的Python开发环境

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

  10. Eclipse和PyDev搭建完美Python开发环境(Windows篇)(转)

    摘要:本文讲解了用Eclipse和PyDev搭建Python的开发环境. 十一长假在家闲着没事儿,准备花点时间学习一下Python. 今儿花了一个下午搭建Python的开发环境,不禁感叹----开源的 ...

最新文章

  1. 如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果
  2. 局域网上传文件到服务器很慢,win10局域网内传文件很慢怎么办_win10局域网内文件传输很慢如何处理-win7之家...
  3. class.forname().newInstance()
  4. Java Set集合详解及Set与List的区别
  5. java 上传文件注意事项
  6. 《高效能程序员的修炼》一第2章 把一堆烂事搞定的艺术
  7. C++ 返回值优化(RVO,Return Value Optimization)
  8. sitck-breaking折棍法理解
  9. fork、vfork、clone 三者的区别
  10. 未来计算机体系结构探索,未来计算机体系结构将是什么样的发展趋势
  11. 麦本本笔记本怎么U盘重装Win10系统教学?
  12. python一键分类文件夹下的文件音乐
  13. ZOJ,PKU--训练题分类
  14. Java Graphics2D的使用
  15. 黎曼猜想能用计算机算吗,关于黎曼猜想的计算机验证
  16. ubuntu18.04 eclipse +sdcc开发stm8l152 并且单步调试
  17. android audiorecorder有哪些功能,android AudioRecorder简单心得分享
  18. 智慧城市的背后是大数据的深度挖掘和利用
  19. 在同时使用label和input标签下下label绑定click事件执行两次的问题
  20. spring及boot注解

热门文章

  1. 基于springboot的打卡签到
  2. 对接支付宝APP支付后端实现最详细教程
  3. 中科院计算所保研资料集合(更新中)
  4. python、变量命名中字母不区分大小写_python变量名不区分大小写吗
  5. 基于Openstack的私有云搭建实践1——概述、原理与整体规划
  6. Entrepreneur\'s Credo of the American 美国的企业家宣言
  7. Mentor.Graphics.FloTHERM.XT.2.3+Mentor.Graphics.Flowmaster.7.9.4
  8. 圣诞节,用python给微信的头像加一个圣诞帽,整起
  9. mongodb数据库添加用户名密码以及忘记密码重置操作
  10. 两个计算机怎么共享一台打印机共享,两台电脑如何共享打印机 多台电脑共享一台打印机设置方法【详细教程】...