杰瑞科技汇

CentOS7如何正确配置Python环境变量?

  1. 系统级环境变量:对所有用户生效。
  2. 用户级环境变量:仅对当前登录的用户生效。

核心概念:PATH 变量

最重要的 Python 环境变量是 PATH,它是一个目录列表,当你在终端输入一个命令(如 python)时,系统会按顺序在 PATH 列表中的每个目录里查找对应的可执行文件。

CentOS7如何正确配置Python环境变量?-图1
(图片来源网络,侵删)
  • 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,如果你通过 yumdnf 安装了 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 开发,我的建议是:

  1. 不要直接使用或修改系统自带的 Python 2.7,除非你在维护系统脚本。
  2. 首选使用 pyenv 来安装和管理你的 Python 版本,这是最灵活、最干净、最不容易出问题的方案。
  3. 在每个项目中,使用 pyenv virtualenv 创建独立的虚拟环境,以隔离项目依赖。
  4. 避免手动修改 /usr/bin/etc/profile 里的 PATH,让 pyenv 为你处理好这一切。
分享:
扫描分享到社交APP
上一篇
下一篇