在Python应用程序中使用.env文件管理环境变量

原始地址:https://dev.to/jakewitcher/using-env-files-for-environment-variables-in-python-applications-55a1

应用程序被部署后,在开发过程中必须考虑应用程序运行的环境以及应用程序执行任务所需的敏感或环境特定信息。
环境变量是软件开发人员向应用程序提供此类信息的关键方式之一,但是如果设置这些变量在本地机器的环境上,运行和测试依赖于环境变量的应用程序可能会很麻烦。
设置或更改环境变量的过程很耗时间,而且随着时间的推移,要管理的环境变量数量变得无法控制。最终,命名冲突成为一个问题,并且每个新变量都需要一个冗长的前缀来区分它与类似变量。
使用
.env 文件将使您能够在本地开发中使用环境变量,而不会污染全局环境命名空间。它还将使您的环境变量名称和值隔离到使用它们的同一项目中。
.env 文件是一个文本文件,其中包含应用程序所需的所有环境变量的键值对。该文件包含在您的项目中,但不保存到源代码控制中,以免将潜在的敏感信息置于风险中。

# 在 .env 文件中定义的环境变量
GCP_PROJECT_ID=my-project-id
SERVICE_ACCOUNT_FILE=path/to/serviceAccountCredentials
STORAGE_BUCKET_NAME=my-super-important-data

几乎每种编程语言都有一个包或库可以用于从
.env 文件中读取环境变量,而不是从本地环境中读取。对于 Python,这个库是
python-dotenv。一旦安装了该库,python-dotenv 的一个常见用例只需要在您的项目中添加两行代码。

from dotenv import load_dotenv
load_dotenv()

load_dotenv() 首先会查找一个
.env 文件,如果找到了,它将从文件中加载环境变量,并使它们能够像其他环境变量一样在您的项目中使用。

import os
from dotenv import load_dotenv
load_dotenv()
GCP_PROJECT_ID = os.getenv('GCP_PROJECT_ID')
SERVICE_ACCOUNT_FILE = os.getenv('SERVICE_ACCOUNT_FILE')
STORAGE_BUCKET_NAME = os.getenv('STORAGE_BUCKET_NAME')

如果在
.env 文件中未找到环境变量,
load_dotenv 将在主机环境中按给定名称搜索变量。这意味着在您的项目本地运行且存在
.env 文件时,将使用文件中定义的变量。当您的项目部署到虚拟机或Docker容器等主机环境中,该环境将使用主机环境中定义的环境变量。
默认情况下,load_dotenv 将在当前工作目录或任何父目录中查找
.env 文件,但如果您的特定用例要求将其存储在其他位置,则还可以指定路径。

from dotenv import load_dotenv
from pathlib import Path
dotenv_path = Path('path/to/.env')
load_dotenv(dotenv_path=dotenv_path)

对于大多数应用程序,这就是您需要使用
python-dotenv 的全部信息,但是还有一些其他功能可以在 python-dotenv 文档中了解到。
使用
.env 文件的一个好处是,很容易从一开始就在开发中考虑环境变量。在开发过程的早期阶段考虑这些事情将使您更容易为部署准备您的应用程序。
如果您在 Docker 容器中部署应用程序,可以使用
–env-file .env 参数以及您的
docker run 命令轻松过渡到在本地运行的容器中运行和测试应用程序。Docker 将在容器的环境中设置与通过
python-dotenv 使用的相同的环境变量。
没有
.env 文件,环境变量是测试应用程序在本地运行时的一部分,尽管很麻烦但却是必要的。通过使用
.env 文件和
python-dotenv 库,处理环境变量变得更加可管理,并且您可以从一开始就以部署为目标进行开发。

你可能感兴趣的:(学习,python,开发语言)