Python 开发人员经常处理他们不想让其他人看到的数据,例如 API 密钥、API 机密、数据库名称等。
程序员存储这些秘密的一种方法是在环境变量中。在本文中,您将学习有关在 Python 中使用环境变量所需的所有知识。我们将向您展示如何设置 Python 环境变量、如何获取它们,以及保护所有秘密安全的不同方法。最后,我们将通过一个现实生活中的示例来说明我们如何在 Vonage 中使用它们。
使用下面的链接在文章中向前跳:
环境变量(有时称为“env vars”)是存储在程序外部的变量,可以影响程序的运行方式。例如,您可以设置包含 API 密钥和机密的环境变量。然后,您的程序在连接到 API 时可能会使用这些变量。
将秘密存储在您的环境中而不是源代码中有一些优点:
本质上,环境变量允许您在不更改程序本身的情况下更改程序的行为。
您可以在操作系统中存储环境变量,但还有其他使用它们的方法,我们很快就会了解。
要学习本教程,您需要在计算机上安装 Python。您可以从Python官方网站下载Python来安装。
您可以使用内置的 os 模块在 Python 中获取和设置环境变量。
您可以通过将以下代码保存在Python文件中然后运行此Python程序来查看程序中的所有环境变量:
运行此代码时,您的 Python 解释器应该打印出操作系统的所有环境变量。您可以像 Python 字典一样访问 os.environ 中的不同环境变量。使用Python获取环境变量的方法有两种:
上面 Python 代码中的最后两行执行相同的操作:都从操作系统获取 USER 环境变量。但是,当您使用第一种方式时,如果 Python 找不到该变量,则会抛出异常。
如果 Python 应用程序运行需要环境变量,则使用 os.environ['MY_ENVIRONMENT_VARIABLE'];如果环境变量是可选的,则使用 os.environ.get('MY_ENVIRONMENT_VARIABLE')。
要在 Python 中设置环境变量,您可以将它们添加到 os.environ 对象,就像使用字典一样。但是,只允许使用字符串,因为这些字符串会直接传递到运行解释器的 shell。
要更新环境变量,只需以完全相同的方式覆盖它即可:
您可能出于不同的原因想要存储环境变量,因此也有不同的存储方式。有时,您只需要在本地计算机上设置一些内容,而在其他情况下,您可能需要在生产中运行应用程序 - 这些用例需要不同的方法!
下面,我们将向您展示 Python 存储环境变量的五种方法:
有时,如果您只想快速设置某些内容,则不想通过 Python 创建环境变量。幸运的是,这可以通过命令行来完成。我在这里给出的示例适用于类 Unix 系统(Mac、Linux 等),但如果您使用的是 Windows,您可以在本教程中学习如何获取和设置环境变量。
在前面的示例中,USER 是操作系统设置的环境变量,代表谁在使用您的计算机。虽然您的操作系统会自动创建此变量,但您也可以创建自己的环境变量。
您可以通过打开命令行并键入以下内容(在类 Unix 系统上)来从命令行查看所有环境变量:
导出
这将为您提供命令行 shell 有权访问的每个环境变量的列表。
以下是如何在命令行上创建环境变量:
导出 VONAGE_API=your_api
这将创建一个名为 VONAGE_API 的变量并将其值设置为 your_api。您可以像这样打印任何变量的值:
回显$VONAGE_API
当您运行上面的代码时,您将看到 your_api 作为输出。
当您使用终端/命令行创建新的环境变量时,它仅针对该会话存在。当您关闭终端时,环境变量不再存在。通常,在编程时,您希望环境变量持久存在,以便每次运行代码时都可以使用它们。实现此目的的一种方法是将它们存储在文件中:例如 .env 文件。
让我们创建一个示例项目来演示如何使用 .env 文件来存储环境变量。
首先,使用终端为本教程创建一个新文件夹,进入其中并在其中创建一个 .env 文件:
mkdir env_variables_tutorial cd env_variables_tutorial touch .env
将此行添加到您的 .env 文件中:
VONAGE_API=your_api
python3 -m venv venv 。 ./venv/bin/activate
现在我们处于Python虚拟环境中,我们可以安装我们需要的包。
pip install python-dotenv
现在,我们可以使用此包中的 dotenv 模块将环境变量从 .env 文件加载到 Python 可以通过 os 模块访问的环境中。创建一个包含以下内容的 Python 文件:
load_dotenv 函数将 .env 文件中的环境变量引入 os.environ,然后可以像操作系统设置的任何其他环境变量一样使用它。
当您创建用于生产的软件时,您可能不会从计算机上运行它。相反,您很可能会在服务器上运行代码。
这意味着您需要知道如何从生产中运行代码的任何位置设置和获取环境变量。
这里是云提供商的列表,您可以在其中获取有关使用它们处理环境变量的更多信息:
如果您使用基于云的 CI/CD 系统,例如 GitHub Actions、CircleCI、Travis 或 Jenkins,您还可以在其系统中存储环境变量。
如果您的项目使用 GitHub,您可以通过导航到“设置”选项卡并在“安全性”下的“秘密和变量”设置中设置 API 密钥等,将环境变量存储在存储库的设置中”.
在这里,您可以通过单击选项并设置值来创建新的存储库密钥。现在,这将在您的 GitHub Actions 运行中可用。
有大量有关使用 GitHub Actions、CircleCI、Travis 和 Jenkins 设置环境变量的信息,以及其他提供商的信息。
将您的机密存储在 .env 文件中可以保留您的环境变量,但确实存在一些问题。
例如,假设您所在的团队有 10 人。每个人都在 .env 文件中跟踪他们的秘密,并且其中一个秘密发生了变化(假设您获得了新的 API 密钥)。这样的话,十个人都必须更新他们的 .env 文件,效率不是很高。
或者,如果您决定从 Heroku 切换到 AWS 该怎么办?在这种情况下,您将必须学习如何在新平台上处理机密,这需要额外的工作。
为了解决这些问题,一些程序员使用像多普勒这样的通用秘密管理器。通用秘密管理器允许您将秘密存储在一个地方,以便团队中的每个人都可以访问它们。
使用通用密钥管理器,您的密钥独立于本地计算机或云提供商,因此无论您在何处运行代码,都可以随身携带它们。
有时,如果您使用外部 API 的示例项目或示例代码片段,所有者/维护者会提供工具以使其更易于使用。通常,您需要使用环境变量来优化工具设置。
在 Vonage,我们在 Python 代码示例中使用环境变量来发送短信、拨打电话、发送验证码、检查欺诈分数等等。
假设您想使用 Vonage 的 Number Insight API 来获取有关某些电话号码的信息。在这种情况下,您可能希望使用像这样的代码示例,以便在 Python 中快速运行。
要使用此示例代码,首先创建一个 Vonage 帐户(不用担心,它是免费的!)以获取 API 密钥和秘密来验证您的 API 调用。
接下来,在 https://github.com/Vonage/vonage-python-code-snippets/ 克隆存储库。完成后,创建一个新的 Python 虚拟环境并使用
安装所需的依赖项您应该看到有关您输入的电话号码的信息,这意味着您使用 Vonage 的 Number Insight API 从环境变量中查找电话号码,而根本不需要编辑 Python 文件本身!这是使用环境变量的一个主要优点。
如果之前的虚拟环境仍然处于活动状态,则停用 # python3 -m venv venv 。 ./venv/bin/activate pip install -r requests.txt
最后,将 .env.dist 文件重命名为 .env,并将您的 API 密钥和密钥添加到该文件中,并将 INSIGHT_NUMBER 的值更改为您要查找的数字。现在您已准备好使用
运行代码python number-insight/ni-basic.py
您应该看到有关您输入的电话号码的信息,这意味着您使用 Vonage 的 Number Insight API 从环境变量中查找电话号码,而根本不需要编辑 Python 文件本身!这是使用环境变量的一个主要优点。
获取和设置环境变量是创建生产软件的重要组成部分。如果您已完成本教程,您现在已经熟悉如何使用 Python 获取和设置环境变量。
您现在还了解了存储秘密的不同选项:使用操作系统临时设置它们、将它们存储在 .env 文件中、将它们保存在云中以及使用通用秘密管理器。您使用的方法将取决于您正在从事的项目的情况。如果您想了解更多信息,这篇关于在环境变量中使用私钥的文章有更多信息。
如果您想开始使用 Vonage API,您可以注册一个免费的开发者帐户(有免费积分!)如果您对本教程有任何疑问,请随时通过我们的 Vonage Community Slack 与我们联系并询问我们在那里或通过 X(以前称为 Twitter)向我们发送消息。
现在,继续尝试在您自己的 Python 项目中使用环境变量!
以上是Python 环境变量 (Env Vars):入门的详细内容。更多信息请关注PHP中文网其他相关文章!