Python-DotEnv如何简化配置管理?
#编程 #python #environmentvariables #dotenv

在Python项目中导航,我们可以快速意识到处理配置可以像探索具有许多选择的迷宫。在本文中,我们将踏上激动人心的旅程,并深入研究Python的环境变量世界,特别关注.env文件的领域。

首先,让我们了解什么是配置管理。我刚刚完成了与太空旅行有关的Netflix系列,所以请想象一下。您是太空飞船的队长,指挥太空旅行者的船员。您的太空船配备了一系列凉爽的小工具和未来派技术,每个技术都有自己的设置和价值。设置可能包括船舶的速度,目的地坐标,通信频率等等。

现在,当您冒险穿越宇宙的广阔时期时,您会遇到不同的行星,每个行星都有其独特的挑战和环境。在某些行星上,您需要以较慢的速度飞行以避免碎屑,而在其他行星上,您可能需要提高沟通频率以建立与外来文明的联系。

在太空飞船术语中,这些设置称为配置变量。在这里,python-dotenv开始发挥作用 - 就像拥有一张神奇的地图,该地图分别存储所有设置,使您的生活变得更加容易!

使用python-dotenv,您可以创建一个称为.env的特殊宝藏,在其中您写下每个星球的所有配置变量。例如,

SPEED=10
DESTINATION_X=234
DESTINATION_Y=567
COMMUNICATION_FREQ=200

现在,每当您接近新星球时,您都会咨询您的宝藏,并迅速更新飞船的设置,而无需直接使用太空飞船的控制面板。就像施放咒语一样,以神奇地调整每个目的地的船舶速度和通信频率!

最好的部分?由于.env宝藏安全地隐藏在您的飞船的储藏室里,因此您可以使所有顶级秘密设置都无法撬开眼睛 - 即使是其他太空飞船工作人员也可能对您的出色冒险感到好奇。

因此,对于python-dotenv,您将成为配置管理的主人,毫不费力地适应了不同的行星和情况,同时使您的太空飞船的秘密安全和合理。 ð -

好吧!让我们跳入一些技术方面,了解如何使用Python-Dotenv以及幕后


ðÖ是什么是python-dotenv?

docs中,python-dotenv将自己定义为

python-dotenv从.env文件读取键值对,并可以将它们设置为环境变量。它有助于遵循12因子原则的申请的开发。

让我们首先理解这一点,key-value对是组织数据的一种方式,其中每个数据都与唯一键关联。 12-factor principles是用于构建现代可扩展,可维护的软件应用程序的最佳实践。这些原则之一涉及在环境中存储配置,这意味着使用环境变量管理配置而不是将它们用于代码。

ð -

使用
安装python-dotenv

pip install python-dotenv

如果未激活,请确保激活虚拟环境。
这将在您的应用程序中添加Python-dotenv,以使其在存在时从.env文件中加载配置(例如,在开发中)。

要配置开发环境,请在项目的根目录中添加一个.env

.
├── .env
└── main.py

在python-dotenv的“ .env”文件中写作的语法类似于bash。

# Spaceship Config
DOMAIN=dev.to
CAPTAIN_EMAIL=captain@${DOMAIN}
DESINATION_PLANET=${DOMAIN}/priplanus
SPEED=10
DESTINATION_X=234
DESTINATION_Y=567
COMMUNICATION_FREQ=200

还确保将.env文件添加到.gitignore,尤其是在包含诸如密码之类的秘密的情况下。
如何在main.py文件中加载/使用这些环境变量:

main.py

import os
from dotenv import load_dotenv

load_dotenv() # takes environment variables from .env

SPEED = os.getenv(“SPEED”) # or use os.environ(“SPEED”)

这就是您能够在Python项目中使用环境变量的方式。容易吗?现在,让我们讨论当您致电load_dotenv()时会发生什么。

ðð¥load_dotenv()

免责声明:我提供的所有数据的来源来自GitHub of python-dotenv

当您从dotenv软件包调用load_dotenv()时,它可以选择接受称为dotenv_path: Optional[StrPath]stream: Optional[IO[str]]的参数,该参数允许您指定通往加载环境变量的自定义.env文件的路径。如果您不提供dotenv_pathstream,则该函数使用find_dotenv()在项目中越来越高的文件夹中搜索.env文件。一旦找到文件,它就会从中加载环境变量。

find_dotenv()函数如果找到了.env文件,则返回到.env文件的路径,或者如果找不到文件,则返回一个空字符串。

现在,我们有文件路径,所以load_dotenv()调用类DotEnv,它是加载所有变量作为环境变量的主要部分。

so,DotEnv具有一种称为set_as_environment_variables的方法,该方法将当前Dotenv作为系统变量加载。这是实现的方式。

一旦find_dotenv()找到.env文件,load_dotenv()便会致电DotEnv类,以执行加载.env文件中所有变量的关键任务,作为环境变量。

DotEnv类包含一个名为set_as_environment_variables的方法,该方法处理从.env文件设置值的过程作为系统级环境变量。这意味着,在调用此方法后,.env文件中定义的变量可以作为整个Python应用程序中的环境变量访问。

这是实现的方式:

01 def set_as_environment_variables(self) -> bool:
02         if not self.dict():
03             return False
04 
05         for k, v in self.dict().items():
06             if k in os.environ and not self.override:
07                 continue
08             if v is not None:
09                 os.environ[k] = v
10 
11         return True

在这里,dict()DotEnv类中的一种方法,它返回Dotenv作为词典。在检查所有条件后,在上述列表的第09行中,设置了环境变量。

在这里,self.overside: bool默认设置为True。如果在load_dotenv中,您将一个参数添加为load_dotenv(override=False),则将不会更新已经存在的环境变量。

这就是python-dotenv在幕后的工作方式,用于设置环境变量。 Python-Dotenv还有更多功能:

  1. 加载配置而无需更改环境
  2. 解析作为流的配置
  3. load .ENV文件ipython

浏览docsGitHub,以了解这些功能如何工作。


其他

现在,船长,船长,凭借python-dotenv的力量,轻松地导航了宇宙,毫不费力地适应了每个星球的独特挑战。

愉快的编码,在下一篇文章中很快见。 ð�ð

GitHubLinkedIn上关注我,并订阅我的YouTube