pyenv必须接管python命令才能自由切换版本,否则python --version仍走系统路径;需确保~/.pyenv/shims在path最前端,并加载pyenv init --path和pyenv init -两条eval命令。

能自由切换,但必须先让 pyenv 真正接管你的 python 命令 —— 否则你敲的 python --version 依然走系统默认路径,跟 pyenv 无关。
pyenv 安装后不生效?检查 PATH 和 init 脚本是否完整加载
常见错误现象是执行 pyenv --version 成功,但 python --version 仍显示系统自带版本,说明 shell 没有正确插入 pyenv 的 shim 目录到 PATH 开头。
- 确认
~/.pyenv/bin在PATH最前面:echo $PATH | grep pyenv,应出现在最左端 - 必须同时加载两行
eval:eval "$(pyenv init --path)"(影响PATH)和eval "$(pyenv init -)"(启用 shell 函数) - 修改的是
~/.bashrc还是~/.zshrc?Kali/Ubuntu 默认用 bash,Arch/Fedora 新装可能用 zsh,别加错文件 - 改完配置后要
source ~/.bashrc(或对应文件),新开终端不会自动重载
安装新 Python 版本时编译失败?缺依赖是主因
执行 pyenv install 3.12.5 报 “configure: error: no acceptable C compiler found” 或 “ModuleNotFoundError: No module named '_ssl'”,基本都是系统级依赖缺失。
inference.sh 的 Python SDK:运行 AI 应用、构建智能体,并集成 150 多个模型。包名:inferencesh (pip install inferencesh)。支持同步/异步……
- Debian/Ubuntu 系统必备:
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-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 openssl-devel bzip2-devel libffi-devel zlib-devel sqlite-devel - 某些镜像源(如清华)可能缓存旧版构建脚本,可临时换回官方源:
export PYTHON_BUILD_MIRROR_URL_BASE="https://www.python.org/ftp/python"
切换版本后 pip 不可用或模块找不到?shim 机制没生效
pyenv 不复制 pip,而是通过 shim 动态指向当前 Python 版本附带的 pip。如果 pip --version 显示路径含 /usr/bin/ 或报错“no module named pip”,说明你调用的不是 pyenv 管理的 pip。
- 验证是否走 shim:
which python应输出~/.pyenv/shims/python,不是/usr/bin/python - 不要用
sudo pip—— sudo 会绕过当前用户的PATH,直接调用系统 pip - 安装包前先确认
pyenv version输出是你预期的版本(如3.11.9 (set by /home/user/.pyenv/version)) - 项目级切换用
pyenv local 3.11.9,它会在当前目录生成.python-version,比global更安全
为什么 pyenv global 切换后子 shell 里版本又变了?
这是 pyenv 的设计行为:pyenv global 设置的是“默认 fallback 版本”,但会被 .python-version(项目级)或 PYENV_VERSION 环境变量(shell 级)覆盖。你开新终端时看到的,其实是当前目录下有没有 .python-version 文件。
- 检查当前目录:
cat .python-version,存在就优先用它,global被忽略 - 想强制用全局设置,删掉项目目录下的
.python-version,或进一个干净目录(如~)再试 - 临时切换只在当前 shell 有效:
pyenv shell 3.10.12,关掉终端即失效,适合调试 - 注意:
pyenv shell设置的值会污染后续所有子 shell,除非手动pyenv shell --unset
最容易被忽略的一点:pyenv 的 shim 本质是 shell 函数 + 小脚本拦截,它对非交互式 shell(比如 cron、systemd service、某些 IDE 内置终端)支持有限 —— 这些场景下常需显式写全路径,如 ~/.pyenv/versions/3.11.9/bin/python。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










