需要一个例子,并请解释我的目的 python-dotenv。 我有点搞不懂这些文件。
来自 Github 页面:
从中读取键和值对。并添加到环境变量中。在开发和生产过程中,使用12因素原则管理应用程序设置非常重要。
假设您已经在设置模块旁边创建了 .env文件。
.env
. ├── .env └── settings.py
在 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模块读取。
os
import os private_key=os.getenv("PRIVATE_KEY")
但是通过这种方式,环境变量只在 shell 活动期间有效。如果关闭 shell 并重新启动它,则必须再次设置环境变量。python-dotenv阻止我们做这种重复的工作。为此,创建 .env文件并以此格式添加变量
python-dotenv
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模块进行访问
load_dotenv()
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的环境文件。它的内容可能是这样的:
~/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创建到该文件的符号链接
~/projects/foo/.env
$ ln -s ~/.envs/foobar/dev ~/projects/foobar/.env
我的项目现在有一个 .env文件。当我寻找它时,set -a和 set +a之间的所有变量都被导出到环境中。
set -a
set +a
$ source ~/projects/foobar/.env
瞧!如果我从相同的 shell 实例运行 python,我可以检索环境并用它更新我的配置:
import os config.update(os.environ)
我将 .env作为到 ~/.envs/foobar/dev的符号链接,作为将其列入的附加预防措施。废物。如果出于某种原因将该文件签入版本控制,那么它的内容只会显示它是到另一个文件的链接。
对我来说,上面的代码看起来并不太麻烦或者难以应付,当 bash (或 zsh)足够好的时候,我不能完全证明使用另一个依赖项来完成如此基本的事情是正确的。