坑一:默认不会更新的配置项

官方文档的例子简单易懂。

1
2
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())

然而这个例子里面缺隐藏了一个大坑。此时当用户在.env中更新配置项的值时,是不会生效的。原因是load_dotenv默认不会更新已经存在的配置项。推荐使用override参数,推荐代码如下:

1
2
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(), override=True)

坑二:#的处理

考虑.env中的如下写法:

1
BASEURL=http://codehub.com/#/python

暂且不讨论在url中带#是否优雅。#在url中表示锚点,的确是会经常用到的;然而在Python中却是表示注释开始。此时BASEURL的值会是http://codehub.com/。以下写法均符合预期。

1
2
BASEURL="http://codehub.com/#/python"
BASEURL='http://codehub.com/#/python'

需要使用双引号/单引号括起来。