在开发和部署中为django/flask应用程序添加.env支持
python-dotenv的Python项目详细描述
从.env
文件中读取密钥和值对,并将它们添加到环境中
变量。它非常适合在开发和
在生产中使用12-因子原则。
嘿,只是想让你知道,自从我开始编写12因素的应用程序以来,我发现python-dotenv对我所有的项目都是无价的。它非常有用而且很管用。
用法
最简单和最常见的用法是调用
应用程序启动,它将从
当前目录或其任何父目录中名为.env
的文件,或来自
指定的路径;之后,可以调用
您需要的与环境相关的方法,请参见os.getenv
.env
看起来是这样的:
您可以选择在每一行前面加上单词export
,这个库将完全忽略它,但是您可以使用它来源代码
bash中的文件。
.env
可以使用POSIX变量展开对变量进行插值,
首先从环境或其他值替换变量
在.env
文件中,如果环境中不存在该变量。
(注意
:到目前为止还不支持默认值扩展,请参见
\35;30)
入门
假设您已经在设置旁边创建了.env
文件
模块:
将以下代码添加到 此时,从.env文件中解析的键/值现在显示为
系统环境变量,通过
您可以使用 可能不依赖文件系统来解析来自
其他来源(如网络存储)。settings.py中
啊!
。一定要倒带
在经过之前。os.getenv()
加载-u dotenv
不要覆盖现有的系统环境变量。那
预计起飞时间erride,将override=true
传递到加载dotenv()
加载dotenv
还接受编码
参数以打开.env
文件。默认编码依赖于平台(无论返回什么locale.getpreferredencoding()
),但可以使用python支持的任何编码。有关支持的编码列表,请参见编解码器模块。find_dotenv()
方法来尝试查找.env
文件
通过(a)猜测从何处开始使用\u文件或工作目录
--允许它在非文件上下文中工作,如ipython笔记本
和repl,然后(b)在目录树上查找
指定的文件--默认情况下称为
.env
。fromdotenvimportload_dotenv,find_dotenvload_dotenv(find_dotenv())
内存文件likes
加载dotenv
和
dotenv_值
接受类似文件的流
>>>fromioimportStringIO# Python2: from StringIO import StringIO>>>fromdotenvimportdotenv_values>>>filelike=StringIO('SPAM=EGGS\n')>>>filelike.seek(0)>>>parsed=dotenv_values(stream=filelike)>>>parsed['SPAM']'EGGS'
返回的值是带键值对的字典。
dotenv_值
如果需要使用env文件
不能将其直接应用到系统环境中。
django
如果您使用的是django,那么应该在
顶部的wsgi.py
和manage.py
安装
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
0
IPython支持
您可以将dotenv与ipython一起使用。您可以让dotenv搜索 对于具有%dotenv的.env或显式提供指向.env文件的路径,请参见 下面是用法。
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
1
命令行界面
对于命令行支持,请在安装期间使用cli选项:
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
2
还包括一个cli接口dotenv
,它可以帮助您操作
未手动打开的.env
文件。安装在
远程计算机与结构相结合(稍后讨论)将使您能够
在远程服务器上更新你的设置,不是吗!
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
3
在远程服务器上设置配置
我们利用优秀的结构来实现
这个。将配置任务添加到本地fab文件,dotenv_path
是
远程服务器上.env
文件的绝对路径的位置。
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
4
使用的目的是非常紧密地镜像heroku配置api。
使用fab config获取所有远程配置信息
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
5
使用fab config:set,<;key>;,<;value>;
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
6
使用fab config:get,<;key>;
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
7
使用fab config:unset,<;key>;
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
8
完全归功于织物,而不是这个项目,你可以链
这样的命令
fab-config:set,<;key1>;,<;value1>;config:set,<;key2>;,<;value2>;
_______ .__ __. ____ ____
| ____|| \ | | \ \ / /
| |__ | \| | \ \/ /
| __| | . ` | \ /
__ | |____ | |\ | \ /
(__)|_______||__| \__| \__/
9
相关项目
贡献
欢迎所有的贡献!请打开 发出或发送给我们 拉取请求。
这个项目目前由Saurabh Kumar和Bertrand Bonnefoy Claudet维护 在没有这些支持的情况下已经成为可能 人
执行测试:
# a comment and that will be ignored.REDIS_ADDRESS=localhost:6379 MEANING_OF_LIFE=42MULTILINE_VAR="hello\nworld"0
或者安装了tox:
# a comment and that will be ignored.REDIS_ADDRESS=localhost:6379 MEANING_OF_LIFE=42MULTILINE_VAR="hello\nworld"1
更改日志
未发布
- 改进交互式模式检测(@andrewsmith)(\183)。
- 重构解析器以修复解析不一致(@bbc2)(;170)。
- 仅将转义解释为双引号字符串中的控制字符。
- 仅当前面有空格时,才将
解释为注释的开始。
0.10.2
- 添加类型提示并将其公开给用户(@qnighy)(\172)
加载dotenv
和dotenv值
现在接受编码
参数,默认为无
(@theskumar)(@earlbread)(\161)- 修复python 2中的
str
/unicode
不一致:值现在总是str
的。(@bbc2)(\121) - 修正0.10.0中引入的Python2中的Unicode错误。(@bbc2)(\176)
0.10.1
0.10.0
- 在未引用的值中添加对UTF-8的支持(@bbc2)(\148)
- 添加对尾随注释的支持(@bbc2)(\148)
- 在值中添加反斜杠支持(@bbc2)(\148)
- 在值中添加对换行符的支持(@bbc2)(\148)
- 在Windows上强制环境变量使用python2 str(@greyli)
- 放弃Python3.3支持(@greyli)
- 修正stderr/-out/-in重定向(@venthur)
0.9.0
0.8.1
- 添加文档测试(@flimm)
- 使"cli"支持成为可选。使用pip install python dotenv[cli]。(@theskumar)
0.8.0
设置键
和取消键
只修改了受影响的文件,而不是 解析并重新写入文件,这会导致注释和其他文件 保持原样。- 在行中添加对
export
前缀的支持。 - 内部折射(@theskumar)
- 允许
加载dotenv
和dotenv值
使用stringio())
(@alanjds)(@theskumar)(78)
0.7.1
- 删除对ipython的硬依赖(@theskumar)
0.7.0
- 添加对通过.env重写系统环境变量的支持。 (@milonimrod) (63)
- 默认情况下禁用".env not found"警告 (@maxkoryukov) (57)
0.6.5
0.6.4
0.6.3
- 在setup.py中处理Unicode异常 (46)
0.6.2
- 修复dotenv list命令(@ticosax)
- 添加iPython支持 (@tillahoffmann)
0.6.0
- 放弃对Python2.6的支持
- 处理带引号的值中的转义字符和换行符。(谢谢) @iameugenejo)
- 删除未加引号的键/值周围的任何空格。(谢谢) @paulochf)
- 增加了posix变量扩展。(谢谢) @hugochinchilla)
0.5.1
- 修复find_dotenv-它现在开始从 函数从中调用。
0.5.0
- 添加
find_dotenv
方法,尝试查找.env
文件。 (感谢@isms)
0.4.0
- cli:添加了
-q/--quote
选项来控制引号的行为 围绕.env
中的值。(谢谢) @hugochinchilla)。 - 提高了测试覆盖率。