赞
踩
在一些项目中,处于安全性的要求,一般不将密码,key
等放入到配置文件中。然而这些代码又是上传在 git
等平台上。为了方便管理。一般采用系统变量的方式来实现。从而实现配置和代码分开。
pip install python-dotenv
目录结构及代码
.
├── .env
└── demo.py
.env
内容
REDIS_HOST="127.0.0.1"
PWD="/home/wohu"
你可以使用单词 export
作为每行的前缀,这将会使 python-dotenv
忽略该变量,但是你可以使用 source
命令运行该文件。
python-dotenv
可以用来修改 POSIX
系统的环境变量。
变量的值是按照下面列表中顺序取值:
.env
文件中定义的值确保引用其他变量时用大括号 {}
包围,就像 ${HOME}
,因为像 $HOME
这样的字符串不会被认为是变量的引用。
demo.py
文件
from dotenv import load_dotenv
load_dotenv()
redis_host = os.environ.get("REDIS_HOST")
pwd = os.environ.get("PWD")
print(redis_host)
print(pwd)
输出结果:
127.0.0.1
/home/wohu/project
最简单和最常见的用法是在应用程序启动时调用 load_dotenv
,该方法从当前目录或其父目录中的 .env
文件或指定的路径加载环境变量,然后你可以调用 os.getenv
提供的与环境相关的方法。
load_dotenv
默认不会更新已经存在的配置项。推荐使用 override
参数,如下:
load_dotenv(override=True)
执行结果:
127.0.0.1
/home/wohu
可以看到用 .env
里面的 PWD
内容替换了系统环境变量的 PWD
。
参数说明:
load_dotenv(dotenv_path=find_dotenv(), override=True)
dotenv_path
: 指定 .env
文件路径,当然如果不传该参数的话(默认为 None
)也会自动调用dotenv.find_dotenv()
去查找文件位置的,但是你的文件名如果不是 .env
那就必须传递该参数。override
: 当 .env
文件中有变量与系统中原来的环境变量有冲突时,按照上面的取值顺序,默认使用系统变量,如果要用 .env
中的变量覆盖系统变量,可以给 load_dotenv()
传递参数override=True
。此时只是临时使用了 .env
中的变量值。encoding
: load_dotenv()
也可以传递 encoding
参数指定文件的编码方式。更改 .env
文件名为 .myenv
.
├── .myenv
└── demo.py
默认就会找不到对应的 .myenv
文件。需要我们指定路径如下:
load_dotenv(dotenv_path=".myenv", override=True)
# demo.py
from dotenv import load_dotenv, find_dotenv
from pathlib import Path # Python 3.6+ only
# 一、自动搜索 .env 文件
load_dotenv(verbose=True)
# 二、与上面方式等价
load_dotenv(find_dotenv(), verbose=True)
# 三、或者指定 .env 文件位置
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path, verbose=True)
一般来讲,将配置项单独放到一个文件中,后续可以 Import 这个文件来使用配置项。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。