python 项目开发技巧 - 配置与代码分离

2017/7/30 posted in  python

问题

写项目代码的时候,在配置上容易碰到下面三个问题:

  1. 多个环境之间存在多套配置,发布时需要单独处理配置信息。
  2. 配置中存在敏感信息,如数据库连接串,开源代码时需要修改配置。
  3. 同一台主机上运行多个项目,但都使用到同一个配置,一但发生变更,需要修改多个项目的代码。

解决方案

针对以上两个问题,在《Flask Web开发》 Miguel Grinberg中找到的解决方案:

  使用环境变量来存储关键配置,或者主机相关环境配置信息

示例

如,针对问题1,我们可以按如下步骤解决:

  1. 在开发主机上设置环境变量

    QindeMacBook-Pro-2:~ echo 'export PYTHON_ENV="dev"' >> ~/.bash_profile
    QindeMacBook-Pro-2:~ source ~/.bash_profile
    

    这是在Mac上的操作,其它linux系统操作方式类似,可能文件名不太一样,Google一下就可以找到,在此不赘述。

  2. 在生产主机上设置环境变量

    cm@iZbp13ifgrbntjy6yxbha4Z:~$  echo 'export PYTHON_ENV="prd"' >> ~/profile
    cm@iZbp13ifgrbntjy6yxbha4Z:~$ source .profile
    

    这是在ubuntu上的操作方法,做参考。

  3. 配置代码

    import os
    env = os.environ.get('PYTHON_ENV')
    
    if env == 'dev':
       book_file_folder = "/Users/qin/Documents/tmp/book/"
    else:
       book_file_folder = "/home/cm/book/"
    

    这样,在开发的过程中就可以梳理线上的配置,通过环境变量来做开关,发布后不需要修改代码就可以让程序指向生产环境的配置。相同的办法可以用在避免代码中出现敏感配置的场景。