什么是环境变量?
环境变量是操作系统在运行时使用的一些值,它们包含了关于系统环境、程序运行路径、用户设置等信息。

你可以把它们想象成全局的配置信息,操作系统和所有在它上面运行的程序都可以读取这些信息。
常见的环境变量:
PATH: 最重要的环境变量之一,它是一个目录列表,当你在终端输入一个命令时,系统会按顺序在这些目录里查找对应的可执行文件。HOME: 当前用户的主目录(/home/your_username)。SHELL: 当前用户默认使用的 Shell(/bin/bash或/bin/zsh)。PYTHONPATH: Python 用来查找模块(.py文件)的路径列表,当你import一个模块时,Python 会在这里面寻找。VIRTUAL_ENV: 如果你在一个虚拟环境中,这个变量会指向虚拟环境的路径,用来标识当前 Python 解释器来自哪个虚拟环境。
为什么需要配置环境变量?
- 让系统找到你的程序:如果你自己编译或下载了一个程序(比如某个版本的 Python),你需要把它所在的
bin目录添加到PATH中,这样你才能在任何地方直接通过命令名(如python3)来运行它,而不是输入完整的路径/path/to/your/program/python3。 - 让 Python 找到你的模块:如果你有一个自己写的工具库,不想把它安装到系统全局的 Python 环境中,你可以把这个库的父目录添加到
PYTHONPATH,这样你就可以在任何 Python 脚本中import你的库了。 - 存储配置信息:在开发中,经常把敏感信息(如数据库密码、API Key)或需要在不同环境(开发、测试、生产)中切换的配置信息存储在环境变量中,而不是硬编码在代码里,这提高了代码的安全性和可移植性。
如何查看环境变量?
查看所有环境变量
使用 printenv 或 env 命令。
# 打印所有环境变量 printenv # 或者使用 env env
查看单个环境变量
使用 echo 命令,并在变量名前加上 符号。
echo $PATH echo $HOME
查找可执行文件路径
which 或 type 命令可以告诉你当前系统使用的某个命令(如 python3)的完整路径。

# 查找 python3 命令的路径 which python3 # type 命令提供更多信息 type python3 # 输出示例: # python3 is /usr/bin/python3
如何配置环境变量?
环境变量的配置分为两种:临时配置和永久配置。
场景1:临时配置(仅对当前终端会话有效)
当你关闭终端窗口后,这些配置就会失效,适用于临时测试或单次任务。
- 设置变量:
export VAR_NAME="value" - 追加路径到 PATH:
export PATH="$PATH:/your/new/path"
示例:
假设你下载了一个 Python 3.10 的安装包,解压后路径是 /home/user/Downloads/Python-3.10.0,它的可执行文件在 bin 目录下,你想临时使用它:

# 进入你的 Python 解压目录的 bin 子目录 cd /home/user/Downloads/Python-3.10.0 # 将这个 bin 目录添加到 PATH 的末尾 export PATH="$PATH:$PWD/bin" # 现在你可以直接使用 python3.10 了 python3.10 --version # 这个设置只在当前终端窗口有效,关闭后,PATH 会恢复原样。
场景2:永久配置(推荐)
为了让配置永久生效,你需要将 export 命令写入系统的配置文件中,具体写入哪个文件,取决于你的需求。
A. 仅对当前用户生效(推荐)
这是最常见和最安全的做法,不会影响其他用户。
你需要修改用户主目录下的 Shell 配置文件,根据你使用的 Shell 不同,文件名也不同:
- Bash Shell (最常见):
~/.bashrc - Zsh Shell:
~/.zshrc - Fish Shell:
~/.config/fish/config.fish
配置步骤 (以 Bash 为例):
-
打开配置文件: 使用
nano或vim等编辑器打开~/.bashrc文件。 代表你的用户主目录。nano ~/.bashrc
-
在文件末尾添加配置: 将你的
export命令添加到文件的最底部。# 在 ~/.bashrc 文件末尾添加以下内容: # 设置一个自定义的环境变量 export MY_APP_ENV="development" # 将 Python 3.10 的路径添加到 PATH (假设你已经解压好了) export PATH="$PATH:/home/user/Downloads/Python-3.10.0/bin" # 将自定义模块库添加到 PYTHONPATH export PYTHONPATH="$PYTHONPATH:/home/user/my_python_libs"
-
保存并关闭文件: 在
nano中,按Ctrl + X,然后按Y,最后按Enter。 -
让配置立即生效: 你可以关闭当前终端窗口并重新打开一个,或者使用
source命令让配置立即在当前终端生效。# 让 ~/.bashrc 文件中的配置立即生效 source ~/.bashrc
-
验证配置: 在新的终端会话中,检查变量是否已设置。
echo $MY_APP_ENV # 应该输出: development which python3.10 # 应该输出: /home/user/Downloads/Python-3.10.0/bin/python3.10
B. 对所有用户生效(谨慎使用)
如果你想让系统里的所有用户都能使用某个程序,你需要修改系统的全局配置文件。
- Bash:
/etc/environment(用于设置简单的KEY="value") - Bash:
/etc/profile或/etc/bash.bashrc(用于执行脚本和export)
修改 /etc/environment (推荐用于全局变量):
-
使用
sudo权限编辑文件。sudo nano /etc/environment
-
文件格式是
KEY="VALUE",每行一个,注意不要使用export。# 文件内容示例: PATH="/usr/local/bin:/usr/bin:/bin" MY_GLOBAL_APP="production"
-
保存后,需要重新登录才能生效。
修改 /etc/profile (用于执行脚本):
-
使用
sudo编辑。sudo nano /etc/profile
-
在文件末尾添加你的脚本。
# 在文件末尾添加 export GLOBAL_PATH="/opt/my_app/bin" export PATH="$PATH:$GLOBAL_PATH"
-
保存后,使用
source /etc/profile或重新登录使其生效。
Python 代码中如何读取环境变量?
在 Python 程序中,我们通常使用 os 模块来读取环境变量。
import os
# 读取单个环境变量
# 如果变量不存在,os.environ.get() 会返回 None
# 如果变量不存在,os.environ['VAR_NAME'] 会抛出 KeyError 异常
home_path = os.environ.get('HOME')
python_path = os.environ.get('PYTHONPATH')
print(f"HOME: {home_path}")
print(f"PYTHONPATH: {python_path}")
# 读取 PATH
path_list = os.environ.get('PATH').split(':')
print("\nPATH 中的目录列表 (前5个):")
print(path_list[:5])
# 检查虚拟环境
venv_path = os.environ.get('VIRTUAL_ENV')
if venv_path:
print(f"\n当前运行在虚拟环境中,路径是: {venv_path}")
else:
print("\n当前未在虚拟环境中运行")
# 在代码中使用环境变量设置数据库连接
# db_host = os.environ.get('DB_HOST', 'localhost') # DB_HOST 不存在,则使用默认值 'localhost'
# db_user = os.environ.get('DB_USER')
# db_password = os.environ.get('DB_PASSWORD')
# print(f"Connecting to database at {db_host} as user {db_user}...")
最佳实践和常见问题
-
优先使用用户级配置 (
~/.bashrc):除非有特殊需求,否则不要修改系统级配置文件,以免影响其他用户或破坏系统稳定性。 -
使用
source命令:修改配置文件后,记得用source或 命令让它在当前终端立即生效,而不是关闭再开。 -
检查优先级:如果你发现命令找不到,可能是
PATH里的多个同名程序,系统会按顺序查找,排在前面的优先级更高,你可以用which命令确认当前使用的是哪个。 -
不要硬编码:在代码中,特别是密码、API Key 等敏感信息,永远不要直接写在代码里,始终从环境变量中读取。
-
使用
.env文件:对于复杂的项目,推荐使用python-dotenv库,你可以在项目根目录创建一个.env文件来存储环境变量,然后在代码中加载它,这比直接修改系统配置文件更灵活、更安全。示例
.env文件:DB_HOST=localhost DB_USER=myuser DB_PASSWORD=mysecretpasswordPython 代码加载:
from dotenv import load_dotenv import os # 加载 .env 文件中的变量 load_dotenv() # 现在就可以像读取普通环境变量一样读取它们了 db_host = os.environ.get('DB_HOST') print(f"DB_HOST from .env: {db_host}")
希望这份详细的指南能帮助你完全掌握在 Linux 环境下为 Python 配置环境变量!
