根本原因是Windows应用执行别名优先级高于PATH,导致pyenv设置的shims被绕过;需关闭设置中“python.exe”和“python3.exe”的应用执行别名,并确保pyenv shims路径位于PATH最前端。

pyenv 切换 Python 版本失败:为什么 pyenv global 不生效?
常见现象是执行 pyenv global 3.9.18 后,python --version 仍显示旧版本。根本原因在于 shell 启动时未加载 pyenv 初始化脚本。
- 检查
~/.pyenv/bin是否在$PATH前置位置(用echo $PATH确认) - 确保在
~/.zshrc(或~/.bashrc)中添加了三行初始化代码:export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -z)"
注意:pyenv init -z是 zsh 专用;bash 用户应改用pyenv init -s - 修改后必须重载配置:
source ~/.zshrc,不能只开新终端(某些终端不会自动读取) - 若已安装多个版本但
pyenv versions不显示,先运行pyenv rehash
conda 创建的环境里 pip install 失败:明明激活了环境,却装到系统 Python?
本质是 pip 命令未绑定到当前 conda 环境的 Python 解释器,尤其在混用 pip 和 conda install 时高发。
- 永远优先用
conda activate myenv激活,而非直接调用python -m pip或改$PATH - 验证是否真激活:执行
which python,输出路径应含envs/myenv;python -c "import sys; print(sys.executable)"必须指向同一路径 - 避免全局 pip 干扰:禁用用户级 pip 配置,检查
~/.pip/pip.conf或pip config list,删掉可能覆盖--target的global.target设置 - 推荐统一用
python -m pip install xxx,它强制使用当前解释器附带的 pip,不依赖 shell 的pip命令查找逻辑
pyenv 与 conda 共存冲突:为什么 conda activate 后 pyenv version 显示 system?
两者机制根本不同:pyenv 通过 shims 劫持 python 命令,conda 通过修改 $PATH 前置环境 bin 目录。共存时后者会覆盖前者。
- 不要在 conda 环境中再用
pyenv global—— 它对当前 conda 环境无效,且可能污染 base 环境 - 若需在 conda 中临时切 Python 小版本(如 3.11.2 → 3.11.9),直接用
conda install python=3.11.9,conda 会自动处理依赖和二进制替换 - 真正需要 pyenv 的场景是:跨大版本开发(如同时维护 Py2.7、Py3.8、Py3.12 项目),此时建议完全不用 conda base,所有项目均用 pyenv + virtualenv
- 检查冲突:运行
type python,若输出python is hashed (/opt/anaconda3/bin/python),说明 conda 已接管,pyenv shim 被跳过
Windows 下 conda 切换慢、报错 “CondaHTTPError”:本地镜像没配对
国内用户常忽略 conda 源配置,导致每次 conda activate 或 conda list 都尝试连 anaconda.org,超时后才回落,拖慢整个环境切换流程。
立即学习“Python免费学习笔记(深入)”;
- 必须设置清华源(其他镜像如中科大已停止维护):
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes
- 关闭默认 channel:
conda config --remove-key channels,再重新 add,避免多源混杂引发元数据冲突 - 若已存在大量缓存损坏,删掉
%USERPROFILE%\.conda\pkgs\下的cache和urls.txt,再conda clean --all - 注意:pyenv 在 Windows 原生支持极差,官方仅推荐用 WSL;Windows 下请无条件选 conda
~/.zshrc 就以为万事大吉,其实 pyenv rehash 和 conda clean 才是解决“看似配置正确却无效”的关键动作。


















