python配置文件读取环境变量_转载:Python项目读取配置的几种方式

1

2

3

4

5

6

7

8

9

10

11

12

import os

import configparser

try:

CONFIG_PATH= os.environ['CONFIG_PATH']

except Exception:

raise ValueError

config= configparser.ConfigParser()

config.read(CONFIG_PATH)

host= config["DATABASE"]["HOST"]

3. 直接使用系统环境变量读取配置

此方法不使用文件来存储配置信息,将所有的配置信息存储到环境变量中,在实践中也比较常见,运维通过ansible部署脚本,在程序运行前将需要配置信息导入到环境变量中。

1

2

3

4

5

6

7

8

import os

secret_key= os.environ.get('SECRET_KEY',None)

if not secret_key:

raise ValueError('You must have "SECRET_KEY" variable')

app.config['SECRET_KEY']= secert_key

不利用文件存储,在一定程度上加强了对密码等配置信息的保护,但也增加了运维的工作量,尤其当需要修改配置的时候。

4. Dynaconf:Pyhton项目的动态配置

上面介绍了三种常见的项目配置方法,最有介绍一个好用的python动态项目配置库:Dynaconf。dyanconf是OSM(Object Settings Mapper), 能够从不同的配置数据存储方式中读取配置,例如python配置文件、系统环境变量、redis、ini文件、json文件等等。

安装:pip install dynaconf

使用方式:

1

2

3

4

from dynaconfimport settings

print(settings.SOME_VARIABLE)

or

print(settings.get('SOME_VARIABLE'))

如果不希望配置跟随项目,可以通过系统环境变量来指定配置文件的位置

1

2

3

4

# using module name

export DYNACONF_SETTINGS=myproject.production_settings

# or using location path

export DYNACONF_SETTINGS=/etc/myprogram/settings.py

4.1 dyanconf读取系统环境变量中的配置

当我们部署的程序需要读取一个MYSQL_HOST的配置用于测试,不需要去重写配置文件,仅需要再系统环境变量中加入:

export DYNACONF_MYSQL_HOST=myserver.com

然后,程序便可以获取到该配置:

>>> from dynaconf import settings

>>> print(settings.MYSQL_HOST)

myserver.com

如果需要指定配置值的数值类型,则通过以下方式增加对应的系统环境变量:

1

2

3

4

5

6

export DYNACONF_NUMBER='@int 123'

export DYNACONF_FLOAT='@float 12.2'

export DYNACONF_FLAG='@bool yes'

export DYNACONF_FLAG2='@bool disabled'

export DYNACONF_LIST='@json [1, 2, 3, 4]'

export DYNACONF_DICT='@json {"name": "Bruno"}'

读取到的配置如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

from dynaconfimport settings

type(settings.NUMBER)

int

type(settings.FLOAT)

float

type(settings.FLAG)

bool

print(settings.FLAG2== False)

True

print(settings.LIST[1])

2

print(settings.DICT['name'])

Bruno

4.2 通过redis存储配置

我们也可以讲配置文件存储到redis中,达到在对不同的机器共享环境变量的效果,仅需要在settings.py文件中增加一下代码:

1

2

3

4

5

6

7

8

9

10

11

12

# connection

REDIS_FOR_DYNACONF= {

'host':'localhost',

'port':6379,

'db':0

}

# and loader

LOADERS_FOR_DYNACONF= [

'dynaconf.loaders.env_loader',

'dynaconf.loaders.redis_loader' # 增加了redis的加载

]

现在可以讲配置存储到redis中,hash默认为DYNACONF_DYNACONF。dyanconf还提供了方法去将配置写入到redis:

1

2

3

4

from dynaconf.utilsimport redis_writer

from dynaconfimport settings

redis_writer.write(settings,name='test',mysql_host='localhost', MYSQL_PORT=3306)

查看Redis,存储的结果如下:

1

2

3

4

DYNACONF_DYNACONF:

NAME='test'

MYSQL_HOST='localhost'

PORT='@int 3306'

至此,python项目常见的配置方法总结完毕,不过在一些微服务架构中,会专门开发配置中心,程序直接从线上读取配置,配置的管理也会开发一套GUI,方便开发和运维。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值