Python 环境变量
环境变量是操作系统为进程准备的一组 键值对(字符串)。子进程一般会继承父进程的环境;在终端里启动 Python 时,解释器进程会带上当前 Shell 或系统里已配置好的变量(如 PATH、HOME / USERPROFILE 等)。
可在 Shell 配置文件(如 Linux/macOS 下的 ~/.bashrc、~/.zshrc)或 Windows 的系统环境变量界面中做持久化配置。与「启动时传参」的关系见 命令行参数。
在 Python 里如何表示?
标准库 os 中的 os.environ 是一个类字典的映射:键为变量名,值为字符串。可以把它理解成「当前进程环境的只读/可改视图」。
说明:
- 已启动的 Python 进程不会自动感知别的进程在磁盘或系统设置里改的环境;你在本进程内对
os.environ的修改,通常影响本进程及之后由此进程启动的子进程(例如subprocess默认继承当前环境)。 - 变量名在常见平台上大小写敏感(Windows 下部分 API 对名称大小写不敏感,但 Python 中仍建议与系统约定一致)。
查看所有环境变量
python
import os
print(os.environ)输出会很长,且因机器与用户而异;调试时更常用下面方式逐行查看。
python
import os
for k, v in os.environ.items():
print(f"{k}={v}")读取某个变量
下标访问:os.environ["NAME"]
python
import os
home_dir = os.environ["HOME"] # Windows 上常用 USERPROFILE
username = os.environ["USER"] # Windows 上可能是 USERNAME
print(f"{username} 的家目录: {home_dir}")若键不存在,会抛出 KeyError。
更安全:os.environ.get 或 os.getenv
python
import os
value = os.environ.get("MY_VAR") # 不存在则 None
value = os.environ.get("MY_VAR", "默认") # 不存在则用默认值
# 等价常用写法:
value = os.getenv("MY_VAR")
value = os.getenv("MY_VAR", "默认")交互示例:
shell
>>> import os
>>> os.environ.get("不存在的变量名")
None
>>> os.environ.get("不存在的变量名", "默认值")
'默认值'用 in 判断是否存在
python
import os
name = input("请输入环境变量名:\n")
if name in os.environ:
print(f"{name} = {os.environ[name]}")
else:
print(f"未定义: {name}")在当前进程中设置或修改
python
import os
os.environ["MY_APP_MODE"] = "debug"
print(os.environ["MY_APP_MODE"])若键已存在,赋值会覆盖。这只改变当前 Python 进程(及其子进程继承到的)环境,不会自动写回你的 Shell 配置文件或 Windows 注册表。
若要删除,可使用 del os.environ["NAME"](不存在会 KeyError),或使用 os.unsetenv("NAME")(在支持的平台上,详见文档)。也可用 os.putenv,一般更推荐直接改 os.environ 以保持映射一致。
持久化到「下次打开终端还有」:需要在操作系统或 Shell 配置里设置,而不是仅在脚本里赋值一次。
平台差异提示
- 家目录:Unix 常见
HOME;Windows 常见USERPROFILE。 - 当前用户名:Unix 常见
USER;Windows 常见USERNAME。
跨平台脚本可用 pathlib.Path.home() 等 API,减少对具体变量名的依赖。
小结
os.environ:像字典一样读写当前进程环境;get/getenv可避免KeyError。- 进程内修改不等于系统永久配置;持久化需在 OS/Shell 层配置。
- 与 命令行参数 搭配:参数适合一次性传入,环境变量适合「会话/机器级」配置(注意勿把密钥提交到仓库)。