- 系统级环境变量:对所有用户生效。
- 用户级环境变量:仅对当前登录的用户生效。
核心概念:PATH 变量
最重要的 Python 环境变量是 PATH,它是一个目录列表,当你在终端输入一个命令(如 python)时,系统会按顺序在 PATH 列表中的每个目录里查找对应的可执行文件。

PATH包含 Python 的安装目录,你就可以直接在任何位置输入python来运行它。PATH不包含,你就必须输入完整的路径,/usr/bin/python3。
我们的主要工作就是确保 Python 的可执行文件路径被正确地添加到 PATH 变量中。
系统自带的 Python (通常为 Python 2.7)
在 CentOS 7 中,系统工具和脚本可能依赖于 Python 2.7。/usr/bin/python 通常指向 Python 2.7。
检查当前 Python 和 PATH
# 查看默认的 python 命令指向哪个版本 python --version # 输出: Python 2.7.5 # 查看 PATH 变量的内容 echo $PATH # 输出类似: /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin # 你可以看到 /usr/bin 在 PATH 中,'python' 命令可以直接使用。
为 Python 3 添加 PATH (如果已安装)
CentOS 7 默认不安装 Python 3,如果你通过 yum 或 dnf 安装了 python3,它的可执行文件通常在 /usr/bin/python3。
由于 /usr/bin 已经在 PATH 中,python3 命令通常可以直接使用,但为了方便,你可能想创建一个 python 的软链接,或者将 python3 添加到 PATH 的更优先位置。
方法:创建软链接 (推荐)
这是最清晰、最不容易冲突的方法。
# 1. 检查 python3 是否已安装 python3 --version # 2. 创建一个名为 'python' 的软链接,指向 'python3' # 这个链接通常放在 /usr/local/bin/ 下,因为它在系统默认 PATH 的前面,优先级更高 sudo ln -s /usr/bin/python3 /usr/local/bin/python # 3. 验证 python --version # 现在应该输出 Python 3.x 的版本
使用 pyenv 管理多版本 Python (强烈推荐)
对于需要在不同项目中使用不同 Python 版本的开发者来说,pyenv 是最佳工具,它不会修改系统的全局 PATH,而是通过 shims(代理)机制来切换当前 shell 使用的 Python 版本。
安装 pyenv 及其依赖
# 安装必要的编译依赖 sudo yum groupinstall "Development Tools" sudo yum install git openssl-devel bzip2-devel libffi-devel xz-devel # 克隆 pyenv 仓库 git clone https://github.com/pyenv/pyenv.git ~/.pyenv # 克隆 pyenv-virtualenv 插件 (可选但强烈推荐,用于管理虚拟环境) git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
配置用户级环境变量
这是最关键的一步,我们需要将 pyenv 的初始化代码添加到 shell 的配置文件中。
- 如果你使用 Bash (CentOS 7 默认 Shell):
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init --path)"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
- 如果你使用 Zsh:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'eval "$(pyenv init --path)"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
重新加载配置文件并验证
# 重新加载配置文件,使其生效 source ~/.bashrc # 或 source ~/.zshrc # 验证 pyenv 是否安装成功 pyenv --version # 查看可以安装的 Python 版本 pyenv install --list
安装并切换 Python 版本
# 安装一个 Python 版本,3.9.7 pyenv install 3.9.7 # 查看所有已安装的版本 pyenv versions # * system (表示当前激活的版本) # 3.9.7 # 设置全局默认 Python 版本 (对所有新终端会话生效) pyenv global 3.9.7 # 验证 python --version # 应该输出 Python 3.9.7 # 你也可以为当前 shell 会话临时设置版本 pyenv local 3.8.10 python --version # 输出 Python 3.8.10 # 当你退出这个终端后,又会回到全局设置的 3.9.7
pyenv 如何工作?
pyenv 会在 PATH 的最前面插入 ~/.pyenv/shims 目录,当你输入 python 命令时,系统会先在这个 shims 目录里查找。pyenv 会根据你当前设置的版本(global/local/shell),在这个 shims 目录里创建一个指向实际 Python 可执行文件的代理文件,这样就实现了无缝切换。
手动编译安装 Python
如果你从源码手动编译安装 Python(例如安装到 /usr/local),你需要手动将路径添加到 PATH。
编译安装 Python (示例)
# 下载源码 wget https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz tar -xvf Python-3.9.7.tgz cd Python-3.9.7 # 编译并安装到 /usr/local ./configure --enable-optimizations sudo make altinstall # 使用 altinstall 避免覆盖系统 python 命令
编译安装后,Python 可执行文件通常在 /usr/local/bin/python3.9。
将路径添加到 PATH
方法 A:仅对当前用户生效 (推荐)
编辑你的 shell 配置文件 (~/.bashrc 或 ~/.zshrc),在文件末尾添加:
# 将 /usr/local/bin 添加到 PATH 的最前面 export PATH="/usr/local/bin:$PATH"
保存后,重新加载配置文件:
source ~/.bashrc
你可以直接使用 python3.9 命令,如果想用 python,可以像场景一那样创建软链接。
方法 B:对系统所有用户生效
警告:修改系统级环境变量可能会影响系统稳定性,请谨慎操作。
编辑 /etc/profile 文件(需要 sudo 权限):
sudo vi /etc/profile
在文件末尾添加:
# 将 /usr/local/bin 添加到 PATH 的最前面 export PATH="/usr/local/bin:$PATH"
保存后,让所有用户重新登录或执行以下命令使配置生效:
source /etc/profile
总结与最佳实践
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 系统默认 Python | 简单,系统工具依赖它。 | 版本老旧(Python 2.7),难以管理多版本。 | 仅运行系统脚本,不进行开发。 |
手动添加 PATH |
直接,简单。 | 容易造成版本冲突,难以管理多版本。 | 只需要固定使用一个特定版本的 Python。 |
pyenv |
强烈推荐,完美管理多版本,隔离项目环境,不污染系统。 | 需要额外安装和配置。 | 所有 Python 开发场景,尤其是需要处理多个项目或不同 Python 版本的开发者。 |
对于 CentOS 7 上的 Python 开发,我的建议是:
- 不要直接使用或修改系统自带的 Python 2.7,除非你在维护系统脚本。
- 首选使用
pyenv来安装和管理你的 Python 版本,这是最灵活、最干净、最不容易出问题的方案。 - 在每个项目中,使用
pyenv virtualenv创建独立的虚拟环境,以隔离项目依赖。 - 避免手动修改
/usr/bin或/etc/profile里的PATH,让pyenv为你处理好这一切。
