Python 无法使用os.ENVIRO.get读取PowerShell设置的环境变量
这里有点随机问题。我使用PowerShell设置了一个环境变量,如下所示:Python 无法使用os.ENVIRO.get读取PowerShell设置的环境变量,python,powershell,environment-variables,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中查询环境变量,它就在那里。如果我通过python用os.envir
$env:GOOGLE_ELEVATION_API="the_api-key"
然后在python中,我尝试使用以下简单脚本阅读它:
from os import environ
key = environ.get("GOOGLE_ELEVATION_API")
这将返回None
。如果我在PowerShell中查询环境变量,它就在那里。如果我通过python用os.environ
查询它,它不是
我发现的所有结果都没有提到这应该是一个问题,无论是在PowerShell方面还是python方面。我没有重新启动我的机器,因为我真的不相信这是应该做的。我确实重新启动了IDE,希望它能以某种方式缓存环境,但谢天谢地,它没有
任何指针都会很棒 - 通过PowerShell的
命名空间设置环境变量仅为当前进程定义它$env:
- 但是,任何直接从PowerShell会话调用的Python脚本都会看到这样的变量,因为子进程继承调用方的环境变量
- 要在所有进程都能看到的计算机级别持久定义Windows环境变量,必须直接使用.NET API(从PowerShell 7.1开始):
WM_SETTINGCHANGE
消息并刷新其环境作为响应的应用程序,这是Windows GUI外壳(explorer.exe
)所做的。)
有关在Windows上持久设置环境变量的详细信息,请参阅。
$env:
Ah。对当我从IDE中的PowerShell终端运行此命令时,它会工作。但在单独的PSD窗口中,它不会。使变量在机器范围内可用的正确方法是什么?(我想我也可以快速查找。)@MathiasR.Jessen:environment变量存在于进程级别(try$env:FOO='bar';Start-ThreadJob{$env:FOO}| Receive-Job-Wait-AutoRemoveJob
-也许这就是您的意思,但请注意,单个进程可以承载多个PowerShell运行空间)。定期调用的Python脚本将自动继承调用PowerShell会话的环境变量。@mklement0 Ack,但我怀疑它不起作用,因为PowerShell没有启动Python:-)谢谢,@Paul-我已更新了答案,以便在需要重新启动应用程序时更清楚地说明问题(大部分时间都是这样)。
# Note: Requires ELEVATION, due to setting at the *machine* level.
[Environment]::SetEnvironmentVariable('GOOGLE_ELEVATION_API', 'the_api-key', 'Machine')