在开发和部署中为django/flask应用程序添加.env支持

python-dotenv的Python项目详细描述


啊! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<谢谢!src=

.env文件中读取密钥和值对,并将它们添加到环境中 变量。它非常适合在开发和 在生产中使用12-因子原则。

<阻塞率> 做一件事,做好!< ><阻塞率>

嘿,只是想让你知道,自从我开始编写12因素的应用程序以来,我发现python-dotenv对我所有的项目都是无价的。它非常有用而且很管用。

用法

最简单和最常见的用法是调用 应用程序启动,它将从 当前目录或其任何父目录中名为.env的文件,或来自 指定的路径;之后,可以调用 您需要的与环境相关的方法,请参见os.getenv

.env看起来是这样的:

啊!

您可以选择在每一行前面加上单词export,这个库将完全忽略它,但是您可以使用它来源代码bash中的文件。

啊!

.env可以使用POSIX变量展开对变量进行插值, 首先从环境或其他值替换变量 在.env文件中,如果环境中不存在该变量。 (注意:到目前为止还不支持默认值扩展,请参见 \35;30

啊!

入门

假设您已经在设置旁边创建了.env文件 模块:

啊!

将以下代码添加到settings.py中 啊!

此时,从.env文件中解析的键/值现在显示为 系统环境变量,通过 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

可能不依赖文件系统来解析来自 其他来源(如网络存储)。加载dotenvdotenv_值接受类似文件的流。一定要倒带 在经过之前。

>>>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.pymanage.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
  • 加载dotenvdotenv值现在接受编码参数,默认为@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

  • --version参数添加到cli(@venthur
  • 启用从当前目录加载(@cjauvin
  • 添加"dotenv run"命令,用于使用.env(@venthur

0.8.1

  • 添加文档测试(@flimm
  • 使"cli"支持成为可选。使用pip install python dotenv[cli]。(@theskumar

0.8.0

  • 设置键取消键只修改了受影响的文件,而不是 解析并重新写入文件,这会导致注释和其他文件 保持原样。
  • 在行中添加对export前缀的支持。
  • 内部折射(@theskumar
  • 允许加载dotenvdotenv值使用stringio())@alanjds)(@theskumar)(78

0.7.1

0.7.0

  • 添加对通过.env重写系统环境变量的支持。 (@milonimrod) (63
  • 默认情况下禁用".env not found"警告 (@maxkoryukov) (57

0.6.5

  • 添加对特殊字符的支持。 (@pjona) (60

0.6.4

  • 用单引号修复问题(@flimm) (52

0.6.3

  • 在setup.py中处理Unicode异常 (46

0.6.2

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)。
  • 提高了测试覆盖率。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java后台通知:安卓   java Resultset未返回具有特殊字符/,   等待加载主帧时的java JxBrowser TimeoutException(invokeAndWaitFinishLoadingMainFrame)   java EclipseLink级联持久化异常   JavaMail 1.5.0漏洞还是gmail奇怪的问题?   java循环和IFT语句的装箱   java API不起作用,progressBar一直在旋转   java httpget在“执行”之后不工作   用户界面Java basic GUI程序错误   捕获异常后java代码失败   noclassdeffounderror在一个简单的网络程序中。我正在使用EclipseIDE运行java程序   安卓:java。朗,反思一下。InvocationTargetException有什么建议吗?   java Spring引导未创建数据源   ID为的java RichFaces 4.5 commandLink执行表单   java Struts2:JSP页面无法从数据库获取值   java缓存修改通知?   在java/spring中审计方法变量的最佳方法是什么?