1. 简介
在一些项目中,处于安全性的要求,一般不将密码,key等放入到配置文件中。然而这些代码又是上传在 git等平台上。为了方便管理。一般采用系统变量的方式来实现。从而实现配置和代码分开。
2. 安装
pip install python-dotenv
3. 使用
目录结构及代码
.
├── .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_dotenvload_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 这个文件来使用配置项。
原文链接:https://blog.csdn.net/wohu1104/article/details/128281466