Python-dotenv 有什么用?

需要一个例子,并请解释我的目的 python-dotenv。
我有点搞不懂这些文件。

170498 次浏览

来自 Github 页面:

从中读取键和值对。并添加到环境变量中。在开发和生产过程中,使用12因素原则管理应用程序设置非常重要。

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

.
├── .env
└── settings.py

settings.py中添加以下代码:

# settings.py
import os
from os.path import join, dirname
from dotenv import load_dotenv


dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)


SECRET_KEY = os.environ.get("SECRET_KEY")
DATABASE_PASSWORD = os.environ.get("DATABASE_PASSWORD")

.env是一个简单的文本文件,每行列出一个环境变量,格式为 KEY = “ Value”。以 # 开头的行被忽略。

SOME_VAR=someval
# I am a comment and that is OK
FOO="BAR"

除了@Will 的回答之外,python-dotenv 模块还提供了一个 find _ dotenv () ,它将尝试查找. env 文件。

# settings.py
import os
from dotenv import load_dotenv, find_dotenv


load_dotenv(find_dotenv())


SECRET_KEY = os.environ.get("SECRET_KEY")
DATABASE_PASSWORD = os.environ.get("DATABASE_PASSWORD")

你可以这样设置 env 变量:

 export PRIVATE_KEY=0X32323

然后用 os模块读取。

import os


private_key=os.getenv("PRIVATE_KEY")

但是通过这种方式,环境变量只在 shell 活动期间有效。如果关闭 shell 并重新启动它,则必须再次设置环境变量。python-dotenv阻止我们做这种重复的工作。为此,创建 .env文件并以此格式添加变量

 PRIVATE_KEY=fb6b05d6e75a93e30e22334443379292ccd29f5d815ad93a86ee23e749227

然后在文件中你想访问 anv 变量

import os
from dotenv import load_dotenv


#default directory for .env file is the current directory
#if you set .env in different directory, put the directory address load_dotenv("directory_of_.env)
load_dotenv()

load_dotenv()将设置来自 .env的环境变量,我们使用 os模块进行访问

   private_key=os.getenv("PRIVATE_KEY")

如果您想指定要查找的文件,只需添加到@canin:

from dotenv import find_dotenv
from dotenv import load_dotenv


env_file = find_dotenv(".env.dev")
load_dotenv(env_file)

如果使用 bash 或 zsh 之类的 shell,dotenv 实用程序大多是多余的(如果不是完全没有意义的话)。

这就是我在 Python 中使用 bash 处理. env 的典型方式。

给定一个在 ~/projects/foobar/下托管的项目,我创建一个位于 ~/.envs/foobar/dev的环境文件。它的内容可能是这样的:

set -a


PROJECT=foobar
DB_NAME=foobar_dev
DB_PASSWORD=5ecret
CACHE_ENABLED=
DEBUG=yes
LOG=/tmp/foobar.log
...


set +a

然后从 ~/projects/foo/.env创建到该文件的符号链接

$ ln -s ~/.envs/foobar/dev ~/projects/foobar/.env

我的项目现在有一个 .env文件。当我寻找它时,set -aset +a之间的所有变量都被导出到环境中。

$ source ~/projects/foobar/.env

瞧!如果我从相同的 shell 实例运行 python,我可以检索环境并用它更新我的配置:

import os
config.update(os.environ)

我将 .env作为到 ~/.envs/foobar/dev的符号链接,作为将其列入的附加预防措施。废物。如果出于某种原因将该文件签入版本控制,那么它的内容只会显示它是到另一个文件的链接。

对我来说,上面的代码看起来并不太麻烦或者难以应付,当 bash (或 zsh)足够好的时候,我不能完全证明使用另一个依赖项来完成如此基本的事情是正确的。