python-dotenv:用.env储存系统变量并在Python3代码中调用

诸神缄默不语-个人CSDN博文目录

在开发过程中,经常需要使用到各种配置信息,如数据库连接字符串、API 密钥等。为了保证这些信息的安全性,以及提高代码的可维护性和灵活性,我们通常会将这些敏感信息存储在环境变量中,而不是直接硬编码在源代码里。本文将介绍如何使用 python-dotenv 包来管理这些环境变量,确保你的 Python 项目更加安全和灵活。

python-dotenv官方pip网站:python-dotenv · PyPI

为什么要使用 .env 文件储存系统变量

安全性

将敏感信息如 API 密钥、数据库密码等存放在 .env 文件中可以有效地避免这些信息被提交到版本控制系统(如 Git)中,减少敏感信息泄露的风险。
有助于遵循最佳实践,即不在源代码中硬编码敏感信息。

便于管理

通过使用 .env 文件,所有的配置信息都集中在一个地方,方便管理和更新。特别是在项目需要在多种环境(开发、测试、生产等)运行时,可以通过更换不同的 .env 文件来快速切换环境配置。

灵活性

环境变量的使用提高了项目的灵活性,允许同一份代码在不同的环境下运行而无需修改代码本身。这在多人协作和应用部署时尤为重要。

使用 python-dotenv 管理环境变量

python-dotenv 是一个 Python 库,可以用来读取 .env 文件中的环境变量,并将它们加载到 Python 的环境变量中。这使得在代码中使用这些变量变得非常简单和直接。

安装 python-dotenv

首先,你需要安装 python-dotenv。可以通过 pip 命令轻松安装:

pip install python-dotenv

创建和配置 .env 文件

在项目的根目录下创建一个名为 .env 的文件。在这个文件中,你可以定义需要的环境变量,例如:

# 这是 .env 文件中的注释
DATABASE_URL="mysql://username:password@localhost/dbname"
API_KEY="your-secret-api-key"

请注意,.env 文件支持 # 开头的注释。

在 Python 中加载和使用环境变量

接下来,你可以在 Python 代码中使用 python-dotenv 来加载这些环境变量。一种常见的做法是在项目的入口文件(如 app.pymain.py)中加载这些变量:

from dotenv import load_dotenv
import os

# 加载 .env 文件
load_dotenv()

# 使用环境变量
database_url = os.getenv('DATABASE_URL')
api_key = os.getenv('API_KEY')

print("Database URL:", database_url)
print("API Key:", api_key)

这段代码首先从 .env 文件加载环境变量,然后通过 os.getenv 方法访问这些变量。

dotenv() 加载环境变量后,这些变量将会覆盖同名的已存在的环境变量。确保你了解这一行为,尤其是当环境变量在不同配置文件中被重复定义时。

处理不同环境的配置

在代码中,使用 load_dotenv() 默认加载 .env 文件。
如果你有多个环境(比如开发环境和生产环境),你可以为每个环境创建不同的.env文件,例如.env.dev和.env.prod。然后,根据需要加载相应的配置文件:

from dotenv import load_dotenv
import os

# 根据需要加载不同的.env文件
if some_condition_for_production:
    load_dotenv('.env.prod')
else:
    load_dotenv('.env.dev')

注意事项

  1. 确保不要将.env文件推送到版本控制系统中,如Git。通常,你应该在.gitignore文件中添加.env。
  2. 在生产环境中,不建议使用python-dotenv直接加载环境变量,因为更推荐使用操作系统级别的环境变量设置。1

结语

通过使用 python-dotenv.env 文件来管理环境变量,你的 Python 项目将更加安全、易于管理和灵活。这种方法尤其适合处理敏感信息和支持多环境配置,是现代应用开发的一种最佳实践。


  1. 这句话的意思是在生产环境(即实际运行的服务器或者是用于正式业务的环境)中,不建议使用 python-dotenv 这个库来管理环境变量。python-dotenv 是一个Python库,它可以从一个文件(通常是 .env 文件)中读取环境变量,并将它们导入到Python应用的环境变量中。这种方式在开发和测试环境中非常方便,因为它可以帮助开发者快速设置和修改环境变量,而不需要修改操作系统的配置。
    然而,在生产环境中,直接在操作系统级别设置环境变量通常被认为是更安全和更稳定的方法。操作系统级别的环境变量可以通过操作系统的配置工具或命令行来设置,不需要通过外部文件。这样做的好处包括:
    安全性:避免将敏感信息(如数据库密码)存放在可能被不当访问或泄露的文件中。
    稳定性:操作系统级的环境变量设置通常不易于因应用程序错误而被修改,且对所有运行的程序都是一致的。
    管理方便:在多个应用间共享环境变量时,统一在操作系统层面管理可以简化配置过程,特别是在大型系统或多服务环境中。
    因此,在生产环境中,直接通过操作系统管理环境变量,而非依赖于应用层面的库(如 python-dotenv),是推荐的做法。
    在 CentOS 系统中设置环境变量:
    临时设置
    可以在终端直接使用 export 命令设置环境变量,这种方式设置的环境变量只在当前会话有效: export MY_VARIABLE=value
    永久设置
    对于所有用户,可以将 export 命令添加到 /etc/profile/etc/environment 文件中。修改这些文件需要管理员权限。
    对于单个用户,可以将 export 命令添加到用户的 ~/.bashrc~/.bash_profile 文件中。
    修改后,重新登录或者使用 source ~/.bashrc 命令来立即应用更改。
    注意事项:
    ①确保在编辑这些文件时,保持语法正确,避免使用错误的命令格式。
    ②对于涉及敏感信息的环境变量(如数据库密码),务必确保文件权限设置得当,防止非授权访问。
    ③修改系统级配置文件(如 /etc/profile/etc/environment)时应特别小心,因为错误的设置可能影响到系统的正常使用。
    通过这些方法,你可以根据你的需要和安全要求,在操作系统层面安全地管理环境变量。
    在Python中调用系统环境变量相对简单。你可以使用Python标准库中的 os 模块来获取环境变量。以下是一个基本的示例,展示如何在Python代码中读取和使用环境变量:
    导入 os 模块
    首先,需要导入 os 模块,这个模块提供了许多与操作系统交互的功能,包括环境变量的管理。
    使用 os.getenv()os.environ
    os.getenv():这个函数允许你读取一个环境变量的值,如果该环境变量不存在,你可以指定一个默认值。
    os.environ:这是一个环境变量字典,它包含了所有当前环境的变量。如果变量不存在,访问 os.environ 时会抛出一个异常。
    示例代码:
    下面的Python代码演示了如何获取名为 MY_VARIABLE 的环境变量的值,并处理可能的异常:
    import os
    # 使用 os.getenv() 获取环境变量

    variable_value = os.getenv(‘MY_VARIABLE’, ‘Default Value’)
    print(“The value of MY_VARIABLE is:”, variable_value)
    # 使用 os.environ 获取环境变量,如果变量不存在,则处理异常

    try:
      variable_value = os.environ[‘MY_VARIABLE’]
      print(“The value of MY_VARIABLE is:”, variable_value)
    except KeyError:
      print(“MY_VARIABLE is not set in the environment.”)
    使用这些方法的场景:
    当你确定环境变量一定存在时,可以直接使用 os.environ,这种方式可以让你的程序在环境变量缺失时立即报错,便于调试。
    如果你不确定环境变量是否设置,或者你想为未设置的环境变量提供一个默认值,os.getenv() 是更安全的选择。
    这样,你就可以根据系统中设置的环境变量来调整Python程序的行为了,比如配置数据库连接信息、API密钥等敏感信息。 ↩︎

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值