Python使用python-dotenv管理环境变量的方法

 更新时间:2025年12月12日 09:58:50   作者:诸神缄默不语  
在开发过程中,经常需要使用到各种配置信息,如数据库连接字符串、API 密钥等,本文将介绍如何使用 python-dotenv 包来管理这些环境变量,确保你的 Python 项目更加安全和灵活,需要的朋友可以参考下

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

为什么要使用 .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直接加载环境变量,因为更推荐使用操作系统级别的环境变量设置。

结语

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

这句话的意思是在生产环境(即实际运行的服务器或者是用于正式业务的环境)中,不建议使用 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密钥等敏感信息。 

以上就是Python使用python-dotenv管理环境变量的方法的详细内容,更多关于Python python-dotenv环境变量的资料请关注脚本之家其它相关文章!

相关文章

  • Python Pandas学习之基本数据操作详解

    Python Pandas学习之基本数据操作详解

    本文将通过读取一个股票数据,来进行Pandas的一些基本数据操作的语法介绍。文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-02-02
  • 使用Python中的reduce()函数求积的实例

    使用Python中的reduce()函数求积的实例

    今天小编就为大家分享一篇使用Python中的reduce()函数求积的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • PyTorch中Tensor和tensor的区别及说明

    PyTorch中Tensor和tensor的区别及说明

    这篇文章主要介绍了PyTorch中Tensor和tensor的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解Django配置JWT认证方式

    详解Django配置JWT认证方式

    这篇文章主要介绍了Django 配置JWT认证方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • python 伯努利分布详解

    python 伯努利分布详解

    今天小编就为大家分享一篇python 伯努利分布详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Pytes正确的配置使用日志功能

    Pytes正确的配置使用日志功能

    在pytest自动化测试中,如果只是简单的从应用的角度来说,完全可以不去了解pytest中的显示信息的部分以及原理,可以通过使用推荐的pytest.ini配置,从而可以做到相对来说比较通用的日志配置,这篇文章主要介绍了Pytes如何正确的配置使用日志功能,需要的朋友可以参考下
    2022-12-12
  • 安装出现:Requirement already satisfied解决办法

    安装出现:Requirement already satisfied解决办法

    最近pip install的时候报错,一大串Requirement already satisfied,所以下面这篇文章主要给大家介绍了关于安装出现:Requirement already satisfied的解决办法,需要的朋友可以参考下
    2022-08-08
  • pytorch实现focal loss的两种方式小结

    pytorch实现focal loss的两种方式小结

    今天小编就为大家分享一篇pytorch实现focal loss的两种方式小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python3.8对可迭代解包的改进及用法详解

    Python3.8对可迭代解包的改进及用法详解

    这篇文章主要介绍了Python3.8对可迭代解包的改进及用法详解,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python列表中常见的一些排序方法

    python列表中常见的一些排序方法

    在Python实际开发中会经常需要用到对列表进行排序,下面这篇文章主要给大家介绍了关于python列表中常见的一些排序方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论