前言
每一個(gè)軟件項(xiàng)目都需要在不同的環(huán)境下部署,例如開發(fā)環(huán)境、測試環(huán)境、線上環(huán)境等等,每個(gè)環(huán)境的配置文件內(nèi)容當(dāng)然是不一樣的,如何優(yōu)雅地根據(jù)環(huán)境部署項(xiàng)目又不需要修改配置文件是一件很重要的事情。作為一個(gè)Java程序員,平常使用maven來根據(jù)環(huán)境打包,現(xiàn)在寫Python,很頭疼這個(gè)問題。
解決方案
通過自定義環(huán)境變量,不說廢話,直接上代碼。
我的Python項(xiàng)目整體結(jié)構(gòu):

Paste_Image.png
- 環(huán)境有兩套:開發(fā)和線上。
dev/env.ini:
[db]
mysql.host=192.168.1.1
prod/env.ini:
[db]
mysql.host=192.168.0.1
- 讀取配置文件內(nèi)容。
app/util/conf:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on Feb 4, 2016
@author: mountain
'''
import ConfigParser
import os
parser = ConfigParser.ConfigParser()
package = os.environ.get('package', 'dev')#讀取環(huán)境變量,默認(rèn)dev
parser.read(os.path.join(os.path.dirname(__file__).split('/app')[0], 'conf/' + package + '/env.ini'))
def get_mysql_host():
return parser.get('db', 'mysql.host').strip()
- 程序入口:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on Feb 4, 2016
@author: mountain
'''
from app.util import conf#此時(shí)將加載配置
if __name__ == '__main__':
print conf.get_mysql_host()
- 命令執(zhí)行:
mountain@king:~/workspace/testpy$ package=prod python main.py
192.168.0.1