简介
- 项目地址:https://github.com/theskumar/python-dotenv
首先看一下github上项目的介绍:
Reads the key,value pair from .env and adds them to environment variable.
大概意思就是在我们做项目时,我们可以把所有用到的环境变量写到.env文件里,然后以k,v的方式读取作为环境变量。
扩展阅读:12-factors
用法
最简单和最常见的用法是在应用程序启动时调用
.env 文件内容写法
1 2 3 4 | # a comment that will be ignored. REDIS_ADDRESS=localhost:6379 MEANING_OF_LIFE=42 MULTILINE_VAR="hello\nworld" |
你可以使用单词
变量的值是下面列表中定义的第一个值:
- 系统环境变量
.env 文件中定义的值- 默认值,如果有的话
- 空字符串
确保引用其他变量时用大括号
1 2 3 4 | CONFIG_PATH=${HOME}/.config/foo DOMAIN=example.org EMAIL=admin@${DOMAIN} DEBUG=${DEBUG:-false} |
项目中使用
安装
pip install -U python-dotenv
基本用法
确保你的项目目录下 有
1 2 3 | . ├── .env └── settings.py |
然后你可以在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # settings.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) |
通过
1 2 3 4 | # settings.py import os SECRET_KEY = os.getenv("EMAIL") DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD") |
参数
-
dotenv_path : 指定.env 文件路径,当然如果不传该参数的话(默认为None )也会自定调用dotenv.find_dotenv() 去查找文件位置的,但是你的文件名如果不是.env 那就必须传递该参数了 -
override : 当.env 文件中有变量与系统中原来的环境变量有冲突时,按照上面的取值顺序,默认使用系统变量,如果要用.env 中的变量覆盖系统变量,可以给load_dotenv() 传递参数override=True 。此时只是临时使用了.env 中的变量值 -
encoding :load_dotenv() 也可以传递encoding 参数指定文件的编码方式。
从流对象加载
从可读的流对象中加载,记得把读指针调到要开始读取的位置。
1 2 3 4 5 6 7 | >>> from io import StringIO # Python2: from StringIO import StringIO >>> from dotenv import dotenv_values >>> filelike = StringIO('SPAM=EGGS\n') >>> filelike.seek(0) >>> parsed = dotenv_values(stream=filelike) >>> parsed['SPAM'] 'EGGS' |
注意:此时返回值是个字典
Django
如果你在Django中使用,请将以上代码添加到
IPython 支持
- 加载扩展
1 | %load_ext dotenv |
- 加载 env文件
1 | %dotenv |
或者指定一个env文件
1 | %dotenv relative/or/absolute/path/to/.env |
- 其他参数
- -o:即override 覆盖原有变量
1 | %dotenv -o |
- -v:输出提示信息
1 | %dotenv -v |
配置远程服务器
与 Fabric 配合使用