在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_path
或stream
,则该函数使用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还有更多功能:
- 加载配置而无需更改环境
- 解析作为流的配置
- load .ENV文件ipython
其他
现在,船长,船长,凭借python-dotenv
的力量,轻松地导航了宇宙,毫不费力地适应了每个星球的独特挑战。
愉快的编码,在下一篇文章中很快见。 ð�ð