这里有点随机问题。我使用 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/