V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
onlytiancai
V2EX  ›  Python

python 服务配置项管理最佳实践讨论

  •  
  •   onlytiancai · 2014-05-23 18:30:21 +08:00 · 3714 次点击
    这是一个创建于 3597 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个服务会运行在各种环境,如开发环境,测试环境,生产环境,
    每个环境有不同的配置,为了合理的管理这些配置项,做如下约定

    - 默认配置项保存在config.py里,受git管理
    - 每个环境有一个独立的config_xxx.py文件,不受git管理, xxx表示环境名
    - config_xxx.py里的配置会覆盖掉config.py的配置

    不同环境启动程序时修改下`APP_ENV`的环境变量,从而加载不同的配置,如

    APP_ENV=dev python app.py
    APP_ENV=testing python app.py
    APP_ENV=production python app.py

    https://github.com/onlytiancai/codesnip/tree/master/python/config
    6 条回复    2014-05-26 14:58:08 +08:00
    zz1956
        1
    zz1956  
       2014-05-23 19:55:27 +08:00
    线上机器:ln -s config_pro.py config.py
    测试机器:ln -s config_test.py config.py
    真实使用的config.py不受git管理,不在代码库里。
    yueyoum
        2
    yueyoum  
       2014-05-24 09:04:59 +08:00 via Android
    曾经用的是ls这种。
    现在大体差不多,不过不ln了

    config.example.xml

    上线了 cp.config.example.xml config.xml

    then modify
    julyclyde
        3
    julyclyde  
       2014-05-24 12:17:26 +08:00
    @yueyoum 差挺远的……你这是wordpress那种做法,example文件是不会变的,版本升级后可以对照看看新增什么选项。ln的话就是同一个文件了
    openroc
        4
    openroc  
       2014-05-24 22:28:23 +08:00
    类似,以前写在config.py里,现在写到.cfg里,并且支持命令行,

    1. python main.py -f test.cfg (or product.cfg)
    2. python main.py --port=8080 (or --port=80)
    jamiesun
        5
    jamiesun  
       2014-05-25 09:41:30 +08:00
    yaml不是很好吗
    onlytiancai
        6
    onlytiancai  
    OP
       2014-05-26 14:58:08 +08:00
    @zz1956 这种用软连接的方式,如果你某次修改了config.py,在线上拉代码时会提示冲突吧,因为你覆盖了config.py

    @yueyoum 这种思路不错,就是git里管理一个配置模板样例,我那个思路和这个一样,但只有个性化的配置才需要在config_xx.py里配置,默认项还是在config.py里,不需要完成拷贝一份config.py

    @openroc 你这个相当于把配置文件路径当参数传给进程吧,也可以。

    @jamiesun yaml和ini都可以,但不太习惯,还是喜欢用.py来做配置,还能写点小逻辑啥的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1004 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:46 · PVG 03:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.