Windows环境下Python脚本运行时如何通过命令行设置环境变量传递API密钥?
Windows环境下Python脚本运行时如何通过命令行设置环境变量传递API密钥?
看起来你遇到的问题有两个关键点——Windows命令行设置环境变量的语法不对,还有脚本里不小心破坏了os.environ的结构,咱们一步步解决:
1. 先修复脚本里的致命错误
你代码里的这一行:
os.environ = "website.abc.com"
这是大问题!os.environ是Python用来管理系统环境变量的类字典对象,你把它直接赋值成字符串后,它就不再是字典了,后续尝试用os.environ['MY_API_KEY']访问环境变量时,自然会报错(因为字符串没有__getitem__方法,也就是你看到的"frozen os in getitem"相关错误)。
如果你是想设置某个环境变量(比如网站地址),应该改成:
os.environ['WEBSITE_URL'] = "website.abc.com"
如果这行是误写的,直接删掉它就行!
2. Windows命令行正确设置环境变量的方法
Windows的CMD和PowerShell语法和Linux不一样,你之前用的是Linux的写法,所以环境变量没传递到脚本里:
情况一:用CMD命令提示符
正确的命令是不要加引号、不要在等号两边加空格:
set MY_API_KEY=abcd1234 && python myfile.py
- 错误写法:
set MY_API_KEY = 'abcd1234'——等号两边的空格会被当成变量名/值的一部分,导致脚本里找不到MY_API_KEY(实际变量名是MY_API_KEY带空格)。 - 也不要加单引号,CMD里设置变量时引号会被当成值的一部分,比如
set MY_API_KEY='abcd1234'会让值变成'abcd1234'(带引号),而不是纯密钥。
情况二:用PowerShell
正确的命令有两种:
- 先设置环境变量,再运行脚本:
$env:MY_API_KEY='abcd1234'; python myfile.py
- 或者用一次性传递的方式(部分PowerShell版本支持):
$env:MY_API_KEY='abcd1234' python myfile.py
3. 更便捷的替代方案:用.env文件(不用每次命令行传参)
如果不想每次运行脚本都在命令行输环境变量,可以用python-dotenv包来管理密钥:
- 先安装包:
pip install python-dotenv
- 在脚本同目录下创建一个
.env文件,内容就是:
MY_API_KEY=abcd1234
- 在脚本开头添加加载代码:
from dotenv import load_dotenv import os # 加载.env文件里的环境变量 load_dotenv() # 之后正常使用os.environ['MY_API_KEY']就行 header = { "Accept": "application/json", "Authorization": f"Bearer {os.environ['MY_API_KEY']}" }
- 直接运行脚本就行,不用传任何参数:
python myfile.py
4. 临时会话内设置环境变量
如果你想在当前终端会话里多次运行脚本,不用每次都传参数,可以先设置环境变量,再运行脚本:
- CMD:
set MY_API_KEY=abcd1234 python myfile.py
- PowerShell:
$env:MY_API_KEY='abcd1234' python myfile.py
这样这个会话里后续运行的所有脚本都能访问到MY_API_KEY变量,关闭终端后变量就失效了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

