Python 中的环境变量

2024 年 8 月 29 日 | 阅读 6 分钟

环境变量是软件开发中的一个关键概念,用于指定和保存系统特定的设置、路径和配置。它们使处理各种环境(例如开发、测试和生产)的设置变得更简单,并且提供了一种将配置信息与代码分离的机制。

本文将介绍如何使用 Python 环境变量来存储和检索关键配置信息。

什么是环境变量?

环境变量是存储计算机系统或特定应用程序的配置信息和设置的系统级变量。这些变量可以由系统上运行的程序和脚本访问和更改,并且它们分别由操作系统或用户设置。

环境变量通常用于存储多个程序和脚本所需的数据,例如可执行路径、系统目录或远程服务认证信息。通过使用环境变量,这些规范可以设置一次,并由系统上运行的所有程序和脚本共享。

Python 的 os 模块提供了一个类似字典的接口来访问系统的环境变量,我们可以通过它访问环境变量。

在 Python 中设置和访问环境变量

在 Python 中,可以使用多种方法设置和访问环境变量。最流行的方法之一是使用 os 模块,它提供了与操作系统交互的功能。

os.environ 字典表示当前环境变量,可用于设置环境变量。通过将值与新键关联,我们可以轻松添加新变量,如下所示

在此示例中,我们创建一个名为 MY_VAR 的新环境变量,并将其值设置为 my_value。

要访问现有环境变量的值,我们可以使用相同的 os.environ 字典并检索与键关联的值

输出

my_value

在此示例中,我们检索 MY_VAR 环境变量的值并将其分配给 my_var_value 变量。

从命令行设置环境变量

除了在 Python 程序中设置环境变量,我们还可以从命令行设置环境变量。这对于在执行程序或脚本之前设置配置信息很有用。在 Python 中,我们可以使用 os 模块设置和接收环境变量。os 模块提供了一个类似字典的接口来访问系统的环境变量,环境变量本身以键值对的形式存储。

在基于 Unix 的系统(如 Linux 和 macOS)上,我们使用 export 命令,后跟变量名及其值来设置环境变量

这将 MY_VAR 环境变量设置为 my_value,仅对当前 shell 会话有效。

在 Windows 上,我们可以使用 setx 命令设置环境变量,如下所示

这会将 MY_VAR 环境变量永久设置为 my_value,因此它将对系统上的所有进程可用。

使用环境变量进行配置

环境变量的主要用途之一是存储程序或应用程序的配置信息。这使得更改各种环境(例如开发、测试和生产)的设置变得更简单,而无需更新代码本身,因为现在配置和代码可以分离。

以连接到数据库的 Python 程序为例。数据库连接的登录名、密码和服务器地址可以存储在环境变量中,如下所示

为了获取环境变量 DB_NAME、DB_USER、DB_PASSWORD、DB_HOST 和 DB_PORT 的值,我们使用 os.environ 字典(如果未设置,则 DB_PORT 是可选的,默认为 5432)。PostgreSQL 数据库的连接就是使用这些值设置的。

通过将这些设置规范放在环境变量中,我们可以轻松地针对不同的情况进行调整,而无需更新代码。例如,对于我们的开发、测试和生产环境,我们可以将这些变量的值设置为不同的值。

使用环境变量的最佳实践。

将环境变量用于配置时,遵循一些最佳实践非常重要,以确保我们的代码安全、可移植且易于维护。

1. 使用有意义的名称

命名环境变量时,使用描述它们所代表的配置细节的有意义的名称非常重要。这使得代码更容易理解和维护,特别是对于包含许多环境变量的大型项目。

例如,如果我们将 API 端点的 URL 存储在环境变量中,我们可以使用 API_URL 之类的名称,而不是 URL 之类的通用名称。这清楚地表明了变量的用途,并有助于避免与可能使用相同名称的其他变量混淆。

使用有意义的名称还可以使代码文档化更容易,并将其与其他开发人员共享。当其他人查看代码时,他们应该能够仅通过查看其名称来理解每个环境变量的用途。

2. 安全存储敏感数据

环境变量可以由系统上运行的所有进程访问,因此安全存储敏感数据(例如密码和访问密钥)非常重要。一种方法是将数据加密存储在文件或密钥存储中,并且仅在运行时将数据加载到环境变量中。

例如,我们可以将数据库连接的加密密码存储在名为 DB_PASSWORD_ENCRYPTED 的环境变量中。然后,我们的代码将读取此变量的值,解密密码,并使用它连接到数据库。

使用加密有助于保护敏感数据,防止在攻击者获得系统访问权限或环境变量意外泄露时被暴露。

另一个选择是使用安全的凭据存储,例如 HashiCorp Vault 或 AWS Secrets Manager,来存储敏感数据。这些服务提供用于检索和管理机密的 API,并且可以与我们的代码集成,以便在运行时安全地检索敏感数据。

3. 记录您的配置

记录您的环境变量及其值非常重要,特别是如果您要与其他开发人员共享代码或将其部署到多个环境。这使得更容易理解您的程序是如何配置的,并降低配置错误的风险。

记录环境变量有助于确保其他开发人员能够理解和使用我们的代码,并且还可以帮助我们在以后回到代码时记住每个变量的用途。

4. 使用库来管理环境变量

随着程序的增长,管理环境变量可能会变得更加复杂。Python 有几个可用的库可以帮助管理环境变量,例如 python-dotenv 和 environ-config。这些库可以从文件中加载环境变量,验证其值,并为缺失的变量提供默认值。

虽然环境变量可用于安全地存储敏感数据,但不应将其作为安全保障。环境变量可以由系统上运行的任何进程(包括潜在的攻击者)访问和修改。

如果我们的代码需要存储敏感数据,我们应该使用加密、安全凭据存储或其他安全方法来保护数据。我们还应该遵循安全最佳实践,例如限制对敏感数据的访问并定期审查我们的代码是否存在安全漏洞。

5. 使用配置管理系统

使用配置管理系统也可以是管理大型项目中环境变量的有用最佳实践。配置管理系统提供了一种自动化跨不同环境和服务器的配置部署和管理的方法。

一些流行的 Python 配置管理系统包括

  • Ansible:一个强大的开源自动化平台,可以自动化许多不同的 IT 任务,包括配置管理。
  • Puppet:另一个开源配置管理工具,允许用户自动化其基础设施的部署和管理。
  • Chef:一个配置管理工具,允许用户将基础设施作为代码进行管理,并自动化应用程序和配置的部署。

通过使用配置管理系统,我们可以确保我们的环境变量在不同环境和服务器之间保持一致,并且可以根据需要轻松更新它们。这有助于减少错误并使在生产中管理我们的代码变得更容易。

结论

控制系统范围配置和设置的有效方法是使用环境变量。我们可以使用 os 模块在 Python 中设置和检索环境变量,并且我们可以使用它们来保存程序和应用程序的配置信息。


下一个主题Excel Python 模块