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

2025-05-27

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

应用程序是为了部署而设计的。在开发过程中,您需要考虑应用程序的运行环境,以及应用程序执行任务所需的潜在敏感信息或特定于环境的信息。

环境变量是软件开发人员向应用程序提供此类信息的关键方式之一,但是如果您在本地机器的环境中设置这些变量,那么在本地运行和测试依赖于环境变量的应用程序可能会很麻烦。

设置或更改环境变量的过程非常耗时,而且随着时间的推移,需要管理的环境变量数量会逐渐增多,最终失控。最终,命名冲突会成为一个问题,每个新变量都需要一个很长的前缀来与类似的变量区分开来。

使用.env文件可以让你使用环境变量进行本地开发,而不会污染全局环境命名空间。它还能将环境变量的名称和值隔离到使用它们的同一项目中。

文件.env是一个文本文件,其中包含应用程序所需的所有环境变量的键值对。此文件包含在您的项目本地,但不会保存到源代码管理中,这样您就不会将潜在的敏感信息置于风险之中。

# environment variables defined inside a .env file
GCP_PROJECT_ID=my-project-id
SERVICE_ACCOUNT_FILE=path/to/serviceAccountCredentials
STORAGE_BUCKET_NAME=my-super-important-data
Enter fullscreen mode Exit fullscreen mode

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

from dotenv import load_dotenv

load_dotenv()
Enter fullscreen mode Exit fullscreen mode

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')
Enter fullscreen mode Exit fullscreen mode

如果在文件中找不到环境变量.envload_dotenv则会在主机环境中按给定名称搜索变量。这意味着,当您的项目在本地运行且.env文件存在时,将使用文件中定义的变量。当您的项目部署到不存在该文件的主机环境(例如虚拟机或 Docker 容器)时.env,将改用主机环境中定义的环境变量。

默认情况下,load_dotenv将在当前工作目录或任何父目录中查找.env文件,但是如果您的特定用例需要将其存储在其他地方,您也可以指定路径。

from dotenv import load_dotenv
from pathlib import Path

dotenv_path = Path('path/to/.env')
load_dotenv(dotenv_path=dotenv_path)
Enter fullscreen mode Exit fullscreen mode

对于大多数应用程序来说,这就是使用python-dotenv高效运行所需的全部信息,但是您还可以在python-dotenv文档中阅读一些其他功能

使用文件的好处之一.env是,在开发初期就考虑到环境变量会更加容易。在开发过程的早期阶段考虑这些因素,可以让你更轻松地完成应用程序的部署。

如果您将应用程序部署在 Docker 容器中,则可以通过在命令--env-file .env中使用标志无缝过渡到在本地运行的容器中运行和测试应用程序。然后,Docker 将在容器环境中设置您通过python-dotenvdocker run使用的相同环境变量。

如果没有.env文件,环境变量虽然在本地测试应用程序时很繁琐,但却必不可少。通过使用.env文件和python-dotenv库,环境变量的使用将变得更加易于管理,并且让您从一开始就能够以部署为出发点进行开发。

文章来源:https://dev.to/jakewitcher/using-env-files-for-environment-variables-in-python-applications-55a1
PREV
前自由职业者获取第一批客户的指南🤝去市场所在的地方⚒发现问题 - 提供解决方案💸找到一种提高竞争力的方法 - 但不要低估自己。❤️建立持久的关系。
NEXT
7 个很棒的 Heroku 替代品