python - 无法使用带有 os.environ.get 的 PowerShell 读取环境变量集

标签 python powershell environment-variables

这里有点随机问题。我使用 PowerShell 设置了一个环境变量,如下所示:

$env:GOOGLE_ELEVATION_API="the_api-key"

然后在 python 中我尝试用这个简单的脚本读取它:

from os import environ

key = environ.get("GOOGLE_ELEVATION_API")

这将返回 None。如果我在 PowerShell 中查询我的环境变量,它就在那里。如果我使用 os.environ 通过 python 查询它,则不是。

我发现的所有结果都没有提到这应该是一个问题,无论是在 PowerShell 端还是在 python 端。我没有重新启动我的机器,因为我真的不相信这是应该做的。我确实重启了我的 IDE,希望它能以某种方式缓存环境,但幸运的是它没有。

任何指针都会很棒!

最佳答案

  • 通过 PowerShell 的 $env: 命名空间设置环境变量,为当前进程定义它。

    • 但是,从 PowerShell session 直接调用的任何 Python 脚本都会看到此类变量,因为子进程继承调用者的环境变量。
  • 持久地所有进程看到的机器级别定义 Windows 环境变量,您必须直接使用 .NET API(从 PowerShell 7.1 开始):

# Note: Requires ELEVATION, due to setting at the *machine* level.
[Environment]::SetEnvironmentVariable('GOOGLE_ELEVATION_API', 'the_api-key', 'Machine')

请注意,只有 future PowerShell session 会看到此变量,并且通常需要重新启动应用程序才能看到新变量 也适用于其他正在运行的应用程序。

(异常(exception)情况是那些主动监听 WM_SETTINGCHANGE 消息并刷新其环境作为响应的应用程序,这就是 Windows GUI shell (explorer.exe) 所做的.)

有关在 Windows 上持久设置环境变量的更多信息,请参阅 this answer .

关于python - 无法使用带有 os.environ.get 的 PowerShell 读取环境变量集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66459734/

相关文章:

arrays - 为什么我的 PowerShell 多维数组被解释为一维数组?

c# - PowerShell 命令通过代码添加 EF 迁移

java - 如何从 Java 设置环境变量?

scala - Play 框架应用程序中的环境特定配置

python - Conda 找不到要安装的包

python - SOCIAL_AUTH_LOGIN_ERROR_URL 不起作用 Django 2.0.6

powershell - 检查IIS是否安装

javascript - 如何让 cron 作业运行 Node.js 脚本以从 .env 文件中读取变量?

jquery - Django 自动完成灯小部件更改表单字段名称

python - 具有自定义插槽的 PyQt 可以工作,而 Qt 设计器则不能