迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中从 Env 文件中读取环境变量

作者:迹忆客 最近更新:2023/05/11 浏览次数:

环境文件存储程序所需的所有依赖项,因此它不需要与来自多个路径的包进行交互。

本文将重点介绍如何在 Python 中读取 .env 文件,以及如何从本地环境文件中导入 Python 中的环境变量。


从本地环境文件读取环境变量

大多数现代程序都使用 docker 在环境中运行它们的程序。 docker 就像一个具有高效内存管理的替代虚拟机。

但是在测试期间,必须将程序从 docker 容器中移除并使用本地环境文件在本地进行测试。

本文将介绍如何在 Python 中设置本地环境文件以及导入和读取 .env 文件。

为 Python 脚本创建环境文件

通过在文本文件中提供程序的键值对并使用 .env 扩展名保存它来创建环境文件。

按照以下步骤创建 .env 文件:

  • 打开记事本,把环境变量写进去。 例如,
    MY_ENV_VAR="This is my env var content."
    
  • 使用后跟 .env 扩展名的名称保存此文件,例如 config.env。 这将创建一个 .env 文件。
  • 我们现在需要在 .env 文件所在的同一目录中创建一个 Python 脚本,以在 Python 中读取 env 文件。

创建读取环境变量的 Python 脚本

该程序使用 python-dotenv 库从本地环境文件中读取 Python 中的 .env 文件。 要安装它,请打开命令提示符或 PowerShell 并编写命令:

pip install python-dotenv

一旦安装了 python-dotenv,我们就可以继续在 Python 中加载脚本和读取 env 文件。 该程序使用两个库包:python-dotenv 和 os。

使用库函数 load_dotenv() 将环境变量加载到代码中。 函数 load_dotenv() 用于从 .env 文件中提取环境变量。

另一个库函数是 dotenv_values,它与前一个类似,只是它不与环境变量交互,而是从 .env 文件返回一个带有解析值的字典。

下面是 Python 程序:

import os
from dotenv import load_dotenv

load_dotenv()

MY_ENV_VAR = os.getenv('MY_ENV_VAR')

最后一行代码使用 os.getenv 函数从 .env 文件导入变量 MY_ENV_VAR 的值,并将其存储在具有相似名称的变量的 Python 程序中。

打印变量 MY_ENV_VAR 将显示 .env 文件中的内容:

This is my env var content.

通过运行 Bash 脚本读取环境变量

这是第二种方法,也解决了Python程序无法读取.env文件时,load_dotenv库函数返回none而不是环境变量的问题。 发生这种情况是因为 .env 文件未被获取,这意味着 Python 程序无法读取 .env 文件并且无法加载数据变量。

在运行 shell 脚本的系统中,加载环境文件和运行 Python 脚本可以包装在一起。 这允许您在虚拟环境中加载 .env 文件,然后在该环境中运行 Python 脚本。

本节将展示如何加载环境变量并将它们包装到 shell 脚本中以在 Python 中读取 .env 文件。

创建一个 .env 文件

此过程类似于上一节中的过程,但不使用像记事本这样的通用文字编辑器,而是需要一个提供 EOL 转换的文本编辑器。

EOL 转换转换文本文件中的行尾。 要创建这样的文件,我们需要:

  • 下载并安装 Notepad++ 或任何其他提供行尾转换的文本编辑器。
  • 写一些环境变量,比如:
    TYPE=prod
    PORT=5000
    
  • 转到编辑 > EOL 转换并选择 Unix(LF)。
  • 使用 .env 扩展名保存文件,例如 config.env

这将创建一个 shell 脚本可以读取的环境文件。 现在,让我们编写一些 Python 代码。

创建一个可以在 Python 中读取 .env 文件的 Python 脚本

该程序在 Python 中导入和读取 .env 文件,无需任何外部 Python 库。 该程序导入库包 os 并使用库函数 os.environ 从变量中提取值。

然后打印提取的值。

import os

print(os.environ.get('TYPE'))
print(os.environ.get('PORT'))

但是,此脚本无法独立读取 Python 中的 .env 文件。 运行脚本返回 None。

Win 10@DESKTOP-8MEIQB8 MINGW64 ~/try
$ python test.py

None
None

发生这种情况是因为 Python 脚本无法访问环境文件,即使它位于同一目录中。 这就是使用 shell 脚本的原因,它获取 .env 文件并同时运行 Python 脚本。

创建一个将 .env 文件加载到 Python 脚本中的 Shell 脚本

此过程与创建环境文件相同,因为 Bash 命令是在 Unix EOL 转换中编写的。

在 Notepad++ 中打开一个新文件,然后编写 Bash 命令,例如:

#!/usr/bin/env bash

set -a
source config.env
set +a

python test.py

第一行代码是一个 shebang,通常需要在 Bash 脚本中声明的字符序列。 在这里,它显示了访问 Bash 的文件路径。

set -a 允许将所有变量导出到各种子进程中。 在这里,该子进程是需要运行的 Python 脚本。

它是 Unix 函数 allexport 的快捷方式。

环境文件变质,换句话说,使用语法 source config.env 加载到 shell 脚本中。 -a 允许导出进入环境的 .env 文件中的所有变量。

set +a 的工作方式与 set -a 相反,它关闭变量的导出,这样其他文件或代码就不会受到影响。

最后一行代码使用语法 python test.py 启动子进程。 它在环境中运行 Python 脚本,读取 Python 中的 .env 文件,并返回 Python 脚本的输出。

一旦 shell 脚本中的代码编写完成,其 EOL 需要转换为 Unix,然后以 .sh 扩展名保存,如 run.sh。 将文件保存到环境文件和 Python 脚本所在的同一目录中。

当在 Bash 中执行时,树命令显示同一目录中的所有三个文件。

jay@DESKTOP-8MEIQB8:/mnt/c/Users/Win 10/try$ tree
.
├── config.env
├── run.sh
└── test.py

完成上述步骤后,就可以运行 Bash 脚本了。

使用命令行运行程序运行 Bash 脚本

命令提示符或 PowerShell 等命令行运行程序有助于在 Windows 中运行 Bash 脚本。 更好的选择是安装 git-bash,它允许我们直接从 Windows 中的任何目录运行 Bash。

本节将解释这两种方式。

必须打开适用于 Linux 的 Windows 子系统功能或 WSL 才能在 Windows 中运行 Bash。 它可以在“打开或关闭 Windows 功能”选项中找到。

转到“开始”菜单并在搜索栏中搜索此选项。 单击它将打开一个弹出窗口,其中包含选项列表和复选框。 向下滚动直到找到适用于 Linux 的 Windows 子系统并勾选它旁边的复选框。

在 Windows 中打开 WSL 后,转到 Microsoft 商店并安装 Linux 发行版,例如 Ubuntu。 安装后,重新启动计算机,Bash 就可以在命令提示符和 PowerShell 中使用了。

要检查它是否已正确安装和工作,请转到命令提示符或 PowerShell 并编写 bash。 终端将切换到 Bash。

WSL 方法的替代选项是 Git-Bash 方法。 Bash可以通过Git直接下载安装到系统中。

下载后打开安装程序。 选择一个首选的安装位置,并将所有其他设置保留为默认设置。

安装程序会提示多个窗口,其中有很多设置,因此请反复单击“下一步”,直到安装开始。

在存储 Python 和 shell 脚本的目录中启动 Bash。 如果使用Git-bash,直接进入目录,右键选择Git Bash Here。

如果使用PowerShell或命令提示符,则必须在进入所需目录后手动执行Bash终端。 进入目录后,键入命令 bash。

在 Bash 内部,shell 脚本需要运行。 在此示例中,shell 脚本名为 run.sh,因此运行 shell 脚本的 Bash 命令为:

./run.sh

这将激活环境并在其中运行 Python 脚本,并返回输出:

Win 10@DESKTOP-8MEIQB8 MINGW64 ~/try
$ ./run.sh
prod
5000

总结

本文介绍了多种在 Python 中读取 .env 文件、从 .env 文件中提取环境变量然后在 Python 脚本中使用它的方法。 读者应该能够轻松创建 .env 文件和绑定 Python 代码和 .env 文件的 shell 脚本。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 中 Segmentation Fault 11 错误

发布时间:2023/05/13 浏览次数:85 分类:Python

我们可以通过检查代码中的错误、增加堆栈大小、使用调试工具、更新 Python 版本、重新安装 Python 或检查系统内存来修复 osx in Python 中的分段错误 11。

在 Python 中向集合添加值

发布时间:2023/05/13 浏览次数:90 分类:Python

有 2 个主要方法可用于向 Python 中的现有集合添加更多值,即 add() 方法和 update() 方法。

Python 版本降级

发布时间:2023/05/11 浏览次数:75 分类:Python

本教程将演示如何根据我们在不同设备上的需求对 Python 进行降级。 我们将讨论适用于 Windows、Linux 和 Mac 设备的方法。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便