推荐学习书目
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 · May 23, 2014 · 4760 views
    This topic created in 4399 days ago, the information mentioned may be changed or developed.
    一个服务会运行在各种环境,如开发环境,测试环境,生产环境,
    每个环境有不同的配置,为了合理的管理这些配置项,做如下约定

    - 默认配置项保存在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 replies    2014-05-26 14:58:08 +08:00
    zz1956
        1
    zz1956  
       May 23, 2014
    线上机器:ln -s config_pro.py config.py
    测试机器:ln -s config_test.py config.py
    真实使用的config.py不受git管理,不在代码库里。
    yueyoum
        2
    yueyoum  
       May 24, 2014 via Android
    曾经用的是ls这种。
    现在大体差不多,不过不ln了

    config.example.xml

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

    then modify
    julyclyde
        3
    julyclyde  
       May 24, 2014
    @yueyoum 差挺远的……你这是wordpress那种做法,example文件是不会变的,版本升级后可以对照看看新增什么选项。ln的话就是同一个文件了
    openroc
        4
    openroc  
       May 24, 2014
    类似,以前写在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  
       May 25, 2014
    yaml不是很好吗
    onlytiancai
        6
    onlytiancai  
    OP
       May 26, 2014
    @zz1956 这种用软连接的方式,如果你某次修改了config.py,在线上拉代码时会提示冲突吧,因为你覆盖了config.py

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

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

    @jamiesun yaml和ini都可以,但不太习惯,还是喜欢用.py来做配置,还能写点小逻辑啥的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   947 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 20:06 · PVG 04:06 · LAX 13:06 · JFK 16:06
    ♥ Do have faith in what you're doing.