- 修改当前 Python 脚本运行时的环境变量(只影响当前进程及其子进程)。
- 修改整个操作系统的环境变量(永久性修改,影响所有新打开的终端和程序)。
下面我将详细解释这两种情况,并提供不同操作系统(Windows, macOS, Linux)下的具体操作方法。

修改当前 Python 脚本运行时的环境变量
这是最常见的需求,通常是为了让当前运行的程序能够找到某个特定的库、可执行文件或配置文件,这种修改是临时性的,只对当前 Python 进程及其创建的子进程有效,程序结束后修改会失效。
在 Python 中,我们使用 os 模块来操作环境变量。
核心函数:
os.environ: 一个os._Environ对象,它就像一个字典,可以用来获取和设置环境变量。os.environ['KEY'] = 'value': 设置一个环境变量。os.environ.get('KEY', 'default_value'): 获取一个环境变量,如果不存在则返回默认值。del os.environ['KEY']: 删除一个环境变量。
示例代码:
import os
import sys
# --- 1. 获取并打印一个环境变量 ---
# 获取 Python 的可执行文件路径
python_path = os.environ.get('PYTHONPATH')
print(f"原始的 PYTHONPATH: {python_path}")
# --- 2. 设置一个新的环境变量 ---
# 假设我们有一个自定义的库路径
my_library_path = '/path/to/my/custom/libraries'
os.environ['MY_CUSTOM_LIB'] = my_library_path
print(f"已设置 MY_CUSTOM_LIB: {os.environ['MY_CUSTOM_LIB']}")
# --- 3. 修改一个已存在的环境变量 ---
# 向 PYTHONPATH 添加一个新路径
new_path_to_add = '/another/path'
if python_path:
# PYTHONPATH 已存在,在其后追加
os.environ['PYTHONPATH'] = f"{python_path}{os.pathsep}{new_path_to_add}"
else:
# PYTHONPATH 不存在,直接设置
os.environ['PYTHONPATH'] = new_path_to_add
print(f"修改后的 PYTHONPATH: {os.environ['PYTHONPATH']}")
# --- 4. 验证子进程是否能获取到修改后的环境变量 ---
# 使用 subprocess 模块启动一个子进程来打印环境变量
import subprocess
print("\n--- 在子进程中打印环境变量 ---")
subprocess.run([sys.executable, "-c", "import os; print('子进程中的 MY_CUSTOM_LIB:', os.environ.get('MY_CUSTOM_LIB')); print('子进程中的 PYTHONPATH:', os.environ.get('PYTHONPATH'))"])
# --- 5. 删除一个环境变量 ---
if 'MY_CUSTOM_LIB' in os.environ:
del os.environ['MY_CUSTOM_LIB']
print("\n已删除 MY_CUSTOM_LIB")
重要提示:
os.pathsep是一个跨平台的路径分隔符:- 在 Windows 上是
- 在 macOS 和 Linux 上是
- 在拼接
PATH或PYTHONPATH这类变量时,使用os.pathsep可以保证代码在不同操作系统上都能正常工作。
永久修改操作系统的环境变量
这种修改会影响整个操作系统,之后所有新启动的终端、应用程序都会使用新的环境变量设置,这通常是为了方便全局使用某些命令行工具(如 git, node)或 Python 包。

方法 A:修改配置文件(推荐,适用于 macOS 和 Linux)
在类 Unix 系统(macOS, Linux)中,环境变量通常在 shell 的配置文件中设置,最常见的是 ~/.bash_profile, ~/.bashrc, ~/.zshrc (对于 macOS Catalina 及以后版本默认的 Zsh shell)。
步骤:
-
打开配置文件: 你可以使用
vim,nano等文本编辑器,对于 Zsh 用户:nano ~/.zshrc
-
添加或修改环境变量: 在文件末尾添加以下内容。注意格式:
(图片来源网络,侵删)export关键字是必须的,它会使变量对当前 shell 及其所有子进程可用。- 等号 两边不能有空格。
# 设置一个新的环境变量 export MY_NEW_VAR="hello world" # 修改 PATH 变量,在前面添加一个新路径 # 使用 $(...) 语法可以获取现有 PATH 的值 export PATH="/path/to/my/bin:$PATH" # 修改 PYTHONPATH export PYTHONPATH="/path/to/my/modules:$PYTHONPATH"
-
保存并关闭文件。
-
让配置立即生效: 你可以关闭并重新打开终端,或者运行以下命令来让当前终端会话加载新的配置:
source ~/.zshrc # 如果使用的是 bash,则是 source ~/.bash_profile
-
验证: 在终端中输入
echo $VAR_NAME来检查变量是否已设置。echo $MY_NEW_VAR echo $PATH
方法 B:通过图形界面(适用于 Windows 和 macOS)
Windows 10 / 11
-
打开“系统属性”:
- 右键点击“此电脑”或“我的电脑”,选择“属性”。
- 点击左侧的“高级系统设置”。
- (或者直接在开始菜单搜索“编辑系统环境变量”并打开它)。
-
编辑环境变量:
在弹出的“系统属性”窗口中,点击“环境变量...”按钮。
-
添加或修改变量:
- 你会看到两个部分:“用户变量”和“系统变量”。
- 用户变量:只对当前登录的用户有效。
- 系统变量:对所有用户和系统服务有效。
- 在相应区域中,找到你要修改的变量(如
Path),点击“编辑...”。 - 对于
Path变量,点击“新建”来添加一个新的路径。 - 对于其他变量(如
PYTHONPATH),如果不存在,点击“新建”并输入变量名和值;如果存在,点击“编辑”来修改。
- 你会看到两个部分:“用户变量”和“系统变量”。
-
保存:
依次点击所有窗口的“确定”来保存设置。
-
验证:
- 重要:打开一个新的命令提示符 或 PowerShell 窗口(旧的窗口不会加载新变量),然后输入
echo %VAR_NAME%来检查。echo %PYTHONPATH%
- 重要:打开一个新的命令提示符 或 PowerShell 窗口(旧的窗口不会加载新变量),然后输入
macOS
- 打开“系统设置”。
- 进入“高级” -> “环境变量”。
- 你会看到一个列表,可以添加、编辑或删除变量。
- 点击 号添加新变量。
- 可以设置变量名和值。
- 可以选择是针对“当前用户”还是“所有用户”。
- 重启终端 或重新登录以使更改生效。
总结与最佳实践
| 场景 | 方法 | 作用范围 | 持久性 | 推荐度 |
|---|---|---|---|---|
| Python 脚本内 | os.environ['VAR'] = 'value' |
当前 Python 进程及其子进程 | 仅在程序运行期间 | ⭐⭐⭐⭐⭐ (脚本内必备) |
| 全局系统设置 | 修改 ~/.bashrc, ~/.zshrc 等 |
当前用户的所有终端和程序 | 永久 | ⭐⭐⭐⭐ (类 Unix 系统) |
| 全局系统设置 | Windows 系统属性 / macOS 系统设置 | 当前用户或所有用户 | 永久 | ⭐⭐⭐⭐ (图形化操作) |
最佳实践建议:
- 优先使用虚拟环境:对于 Python 项目管理,强烈推荐使用
venv或conda等工具创建虚拟环境,这可以让你为每个项目安装独立的包,而无需修改全局的site-packages或PYTHONPATH,是解决依赖冲突的最佳方式。 - 脚本内修改:如果你的脚本依赖于某个特定的外部路径(如配置文件、动态链接库),应在脚本启动时使用
os.environ动态设置,而不是依赖用户的全局环境配置。 - 谨慎修改全局环境:永久性地修改系统环境变量(尤其是
PATH)可能会影响其他程序,请确保你知道自己在做什么,如果只是为了某个项目,虚拟环境是更安全、更清洁的选择。
