Skip to content

Python 环境变量

环境变量是操作系统为进程准备的一组 键值对(字符串)。子进程一般会继承父进程的环境;在终端里启动 Python 时,解释器进程会带上当前 Shell 或系统里已配置好的变量(如 PATHHOME / 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.getos.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 层配置。
  • 命令行参数 搭配:参数适合一次性传入,环境变量适合「会话/机器级」配置(注意勿把密钥提交到仓库)。

参考