最常见原因是缺少编译依赖,尤其是zlib-devel、openssl-devel、readline-devel;需先安装对应系统依赖并重新加载shell配置,再执行pyenv install。

pyenv 能装多个 Python 版本,但必须按顺序做对三件事:装好依赖、正确初始化 shell、用 pyenv install 而不是系统包管理器装版本。
为什么 pyenv install 3.9.18 总是失败?
最常见原因是缺少编译依赖,尤其是 zlib-devel、openssl-devel、readline-devel 这三个。CentOS/RHEL 系统容易漏掉 zlib-devel,导致后续安装的 Python 缺少 zlib 模块,连 pip 都无法运行。
- Debian/Ubuntu 用户执行:
sudo apt-get install -y make build-essential zlib1g-dev libssl-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev - CentOS/RHEL 用户执行:
sudo yum groupinstall "Development Tools",再补全:sudo yum install -y gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel - 安装完依赖后,务必重新登录 shell 或运行
source ~/.bash_profile(或~/.bashrc),否则pyenv命令可能找不到
pyenv install 和系统 yum install python3 能共存吗?
能,而且必须共存——pyenv 安装的版本默认放在 ~/.pyenv/versions/ 下,完全不碰 /usr/bin/python3 或 /usr/local/bin。系统自带的 Python 仍由 which python 指向,pyenv 只是靠 PATH 优先级把它“盖住”。
- 验证是否生效:运行
which python,输出应为~/.pyenv/shims/python;若仍是/usr/bin/python,说明eval "$(pyenv init -)"没生效 - 不要用
sudo pyenv install:它会试图往系统目录写,权限错误且破坏隔离 - 离线安装更稳:把
Python-3.9.18.tgz放进~/.pyenv/cache/,再跑pyenv install 3.9.18,避免网络中断或 SSL 错误
怎么让不同项目自动用不同 Python 版本?
靠 .python-version 文件。它比 pyenv global 更精准,也比 pyenv shell 更持久。
- 进入项目根目录,执行
pyenv local 3.8.12,会在当前目录生成.python-version,内容就是3.8.12 - cd 进该目录后,
python -V立即显示Python 3.8.12;cd 出去就恢复上层设定(或全局版本) - 注意:该文件会被 Git 跟踪,团队协作时要统一写进
.gitignore或明确提交——否则别人 clone 后可能因本地没装对应版本而报错pyenv: version `3.8.12' is not installed
真正麻烦的不是装多个版本,而是每次新装一个版本后忘记运行 pyenv rehash(虽然新版通常自动触发)。如果某天发现 pip 命令突然失效,先检查 ~/.pyenv/shims/ 下有没有对应软链,再手动补一次 pyenv rehash。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











