一个比较大的项目总是会涉及到很多的参数,最好的方法就是在一个地方统一管理这些参数。最近看了不少的python项目,总结了两种很有意思的配置管理方法。

第一种 基于easydict实现的配置管理

首先需要安装numpy、easydict以及yaml:

pip install numpy

pip install easydict

pip install yaml

就可以了。

然后定义配置类config.py:

import numpy as np

from easydict import EasyDict as edict

import yaml

# 创建dict

__C = edict()

cfg = __C

# 定义配置dict

__C.dev = edict()

__C.dev.name = 'dev-xingoo'

__C.dev.age = 20

__C.test = edict()

__C.test.name = 'test-xingoo'

__C.test.age = 30

# 内部方法,实现yaml配置文件到dict的合并

def _merge_a_into_b(a, b):

"""Merge config dictionary a into config dictionary b, clobbering the

options in b whenever they are also specified in a.

"""

if type(a) is not edict:

return

for k, v in a.items():

# a must specify keys that are in b

if k not in b:

raise KeyError('{} is not a valid config key'.format(k))

# the types must match, too

old_type = type(b[k])

if old_type is not type(v):

if isinstance(b[k], np.ndarray):

v = np.array(v, dtype=b[k].dtype)

else:

raise ValueError(('Type mismatch ({} vs. {}) '

'for config key: {}').format(type(b[k]),

type(v), k))

# recursively merge dicts

if type(v) is edict:

try:

_merge_a_into_b(a[k], b[k])

except:

print(('Error under config key: {}'.format(k)))

raise

else:

b[k] = v

# 自动加载yaml文件

def cfg_from_file(filename):

"""Load a config file and merge it into the default options."""

with open(filename, 'r', encoding='utf-8') as f:

yaml_cfg = edict(yaml.load(f))

_merge_a_into_b(yaml_cfg, __C)

使用的时候很简单,main.py:

from config import cfg_from_file

from config import cfg

cfg_from_file('config.yml')

print(cfg.dev.name)

print(cfg.test.name)

同级目录下创建配置文件config.yaml

dev:

name: xingoo-from-yml

输出:

xingoo-from-yml

test-xingoo

总结

这样的好处就是在任何的Python文件中只要from config import cfg就可以使用配置文件。

第二种 基于Class实现

这种基于普通的python对象实现的,创建config2.py:

class Config:

def __init__(self):

self.name = 'xingoo-config2'

self.age = 100

使用的时候直接创建一个新的对象,如何python模块之间需要引用这个变量,那么需要把配置对象传过去:

import config2 as config2

cfg2 = config2.Config()

print(cfg2.name)

print(cfg2.age)

输出为:

xingoo-config2

100

总结

第二种方法简单粗暴...不过每次传递参数也是很蛋疼。还是喜欢第一种方式。

python做项目管理_python项目实现配置统一管理的方法相关推荐

  1. postgresql设置postgres密码_django项目时配置postgresql数据库的方法

    python3.8使用pycharm在开发django项目时配置postgresql数据库的方法 django默认支持sqlite3,如果想使用最近最热门的关系型数据库postgresql时,那该怎么 ...

  2. python做些什么项目_Python 的练手项目有哪些值得推荐

    1 Web方向的练手项目 这个其实是肯定不用多少的了.Python的练手项目就是可以做一个网站了.我们可以做一个属于自己的博客.在做博客的时候,我们可以巩固的知识点是 Html+CSS+JS的基础知识 ...

  3. Android Studio配置统一管理依赖版本号引用

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo采用的是其中一个方案,其他方案请阅读参考资料<Android Studio中统一管理版本号引用配置> 使用步骤 ...

  4. python视觉识别字_Python怎么识别文字?正确 的方法详解

    爬虫--文字识别 机器视觉 从Google的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广泛且具有深远的影响和雄伟的愿景的领域. 这里我们将重点介绍机器视觉的一个分支:文字识别.介 ...

  5. 【项目管理】项目中的进度管理,你知道多少?

    有效实施项目进度计划,是项目成功的重要保障,项目进度管理也是每位项目经理都非常重视的问题. 项目中的进度管理可以帮助您了解项目当前进度,估计项目是否能顺利完成. 项目管理就是通过的对知识.技能.工具的 ...

  6. linux web故障,网络故障处理与优化 linux服务器配置及故障排除 项目9 配置与管理web服务器.docx...

    配置与管理WEB服务器 准备工作: 先切换到root账号: 执行以下两条命令,临时关闭防火墙和selinux: systemctl stop firewalld.service setenforce ...

  7. python time计时_python中的计时器timeit的使用方法

    这篇文章主要介绍了关于python中的计时器timeit的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 本文介绍了python中的计时器timeit的使用方法,分享给大家,具 ...

  8. 用python做web小项目_Python之路【第十八篇】Django小项目webQQ实现

    WEBQQ的实现的几种方式 1.HTTP协议特点 首先这里要知道HTTP协议的特点:短链接.无状态! 在不考虑本地缓存的情况举例来说:咱们在连接博客园的时候,当tcp连接后,我会把我自己的http头发 ...

  9. python做项目管理代码_代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)...

    一.python如何操作git 如果你想用python代码操作git需要下载一个模块 安装 pip install gitpython 基本使用 #从远处仓库下载代码到本地 importosfrom ...

最新文章

  1. 关于在64位系统上,使用APlayer,运行报错“找不到指定的模块”
  2. R,让你的数据分析更简便!
  3. JUnit与TestNG:您应该选择哪种测试框架?
  4. 荣耀2021年度手机颜值天花板首销!2699元起
  5. 突然!华为P30 Pro真机上手视频曝光:屏幕指纹解锁秒开
  6. 计算机网络概述的功能 组成,计算机网络的概述
  7. tensorflow之读取jpg图像保存为tfrecord再读取
  8. jbpm5.1介绍(7)
  9. IE浏览器起始页通过注册表修改
  10. windows屏幕放大镜
  11. DP POJ1160
  12. 虾皮的发货模式是什么?怎么发货?
  13. 送一些专属红包封面。
  14. 关于部署OOS时出现的证书问题解决
  15. 【无标题】h5跳转微信公众号关注页面
  16. html表格去除间距,table 去掉 td之间间距
  17. 条件概率、全概率公式和贝叶斯公式
  18. 解决 Vmware 虚拟机安装linux系统无法联网的的问题
  19. 如何获取当前地址以及天气温度情况,适用于微信小程序(端午假期将至,祝愿大家端午快乐)
  20. maven多模块依赖导入失败以及私服下载包卡死

热门文章

  1. python爬虫网站接口的使用——将网页上的输入内容的接口转移到对应的爬虫中(通过爬虫查询相关网页的信息)
  2. 滴滴SQL面试题之打车业务问题如何分析
  3. 梯度下降法的matlab实现
  4. MyEclipse启动报错The configuration area at is not writable
  5. 【演示文稿制作动画】Focusky教程 | 元素分组
  6. SWUST OJ 321: 函数的递归调用
  7. 职称计算机excel考前,2020年职称计算机考试EXCEL考前预测试题4
  8. [转]日历生成算法-中国公历(格里历)
  9. 代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小子数组、59.螺旋矩阵II、数组总结
  10. LR(1) 分析例子