【问题标题】:How to set environment variables with python?如何用python设置环境变量?
【发布时间】:2022-01-08 19:51:50
【问题描述】:

我希望使用 python 读取.env 文件并公开环境变量,以便同一环境中的其他脚本可以访问它们。我有这个脚本:

from dotenv import load_dotenv
import os

load_dotenv("common.env")
print(os.environ["CONFIG_FOLDER_NAME"])

当我运行这个脚本时,它会打印出正确的值。

但是,当我尝试从其他文件中读取变量时,它们似乎不存在。即使我做echo $CONFIG_FOLDER_NAME 它返回空。

【问题讨论】:

  • “当我尝试从不同的文件中读取变量”:你是怎么做到的?那个文件是什么样子的?而echo 不是 Python 命令/函数,所以我不确定你为什么要从 Python 转到 shell。
  • 这不是创建环境变量,它只是用文件中的值填充 Python 的内部 os.environ 字典,就好像它们是使用环境变量设置的一样。它在这个 Python 进程之外什么都不做。
  • 您在脚本中所做的任何事情都无法更改调用 shell 中的环境变量。你能做的最多就是让它打印在 shell 中设置这些环境变量所必需的 shell 命令,然后在 shell 中你必须捕获该输出并运行这些命令。
  • 或者你可以每次只加载 env 文件。我认为这比乱搞操作系统的东西要好。

标签: python environment-variables dotenv


【解决方案1】:

好的,根据上面的评论,为了帮助可能不知道这一点的未来用户,您不能使用 Python 设置当前进程范围之外的环境变量

您可以让 python 了解一些变量,并为进程及其子进程的范围更改环境变量。但是您不能在系统本身或其他进程(不是当前进程的子进程)中设置 env 的值。例如,如果我设置了一个名为 HOST_URL 的环境变量,它实际上在系统环境中是不可访问的。

我找到了三种实际设置变量的方法:

  1. 运行 bash 脚本来设置环境变量值
  2. 使用 VSCode launch.json 使用 envenvFile 设置变量
  3. 如果您正在容器化您的应用,请通过 Docker 文件或 docker-compose.yml 定义它们

注意: 如果有其他选项可以解决此问题,请发表评论,我会添加它们。我希望这篇文章对像我这样的新开发人员有帮助。羞辱和无益的 cmets 从未帮助过任何人或改进过任何事情。这是或应该是一个学习和知识交流平台,它应该对所有编程问题开放Stack Overflow Isn’t Very Welcoming. It’s Time for That to Change

【讨论】:

  • you cannot set environment variables from Python.... 这是不正确的。您可以使用 Python 或任何其他语言设置环境变量。你不能做的是在没有它的合作的情况下修改任意进程(例如,你的 Python 程序的父进程)的环境。
  • 如何设置环境变量,以便我可以从其他进程或系统本身使用它们?
  • 我不知道你的意思是“从系统本身”。无论如何,这是一个每周都会被多次询问的常见问题解答。有关最近的一个示例,请参阅*.com/questions/70216898/…。一种选择是使用您的 Python 程序设置其环境,然后使用 os.execl 之类的东西将 python 进程替换为 shell。该shell将继承python环境。
  • 这解释了系统是什么以及我们如何在那里设置环境变量以防我的评论不清楚linuxize.com/post/…
  • 每周都会问这个问题很好,这意味着人们正在努力学习有关编程的东西,堆栈溢出是提问的地方