使用python-dotenv进行高效的环境管理
1 python-dotenv 项目简介
- 项目地址:https://github.com/theskumar/python-dotenv
- 功能描述:从
.env
文件读取键值对,并将它们添加到环境变量中。 - 核心理念:在项目中,可以将所有使用的环境变量写入
.env
文件,然后以键值对的方式读取作为环境变量。
2 用法
2.1 .env文件内容示例
1 |
|
- 注意:使用
export
作为每行的前缀,python-dotenv
会忽略该变量,但可以使用source
命令运行该文件。
2.2 项目中如何使用
安装
1 |
|
基本用法
确保项目目录下有 .env
文件,然后在 settings.py
中添加以下代码:
1 |
|
通过 load_dotenv
,可以像访问系统环境变量一样使用 .env
文件中的变量,例如 os.getenv(key, default=None)
。
参数
dotenv_path
: 指定.env
文件路径,当然如果不传该参数的话(默认为None
)也会自定调用dotenv.find_dotenv()
去查找文件位置的,但是你的文件名如果不是.env
那就必须传递该参数了override
: 当.env
文件中有变量与系统中原来的环境变量有冲突时,按照上面的取值顺序,默认使用系统变量,如果要用.env
中的变量覆盖系统变量,可以给load_dotenv()
传递参数override=True
。此时只是临时使用了.env
中的变量值encoding
:load_dotenv()
也可以传递encoding
参数指定文件的编码方式。
从流对象加载
从可读的流对象中加载,记得把读指针调到要开始读取的位置。
1 |
|
注意:此时返回值是个字典
3 常见问题及解决方法
- 问题:在 virtualenv 中尝试通过 pip 安装时遇到的问题。
- 解决方案:应该安装
python-dotenv
,使用pip3 install python-dotenv
或pip install python-dotenv
。
坑一:load_dotenv函数默认不会更新的配置项。
官方文档的例子简单易懂。
1
2from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())然而这个例子里面缺隐藏了一个大坑。此时当用户在
.env
中更新配置项的值时,是不会生效的。原因是load_dotenv
默认不会更新已经存在的配置项。推荐使用override
参数,推荐代码如下:1
2from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(), override=True)坑二:env文件中
#
的处理。考虑
.env
中的如下写法:1
BASEURL=http://codehub.com/#/python
暂且不讨论在 url 中带
#
是否优雅。#
在 url 中表示锚点,的确是会经常用到的;然而在Python
中却是表示注释开始。此时BASEURL
的值会是http://codehub.com/
。以下写法均符合预期。1
2BASEURL="<http://codehub.com/#/python>"
BASEURL='<http://codehub.com/#/python>'需要使用双引号 / 单引号括起来。
使用python-dotenv进行高效的环境管理
https://fulequn.github.io/2023/08/Article202308241/