M1 Mac下pyenv global命令无法切换Python版本求助
M1 Mac下pyenv无法切换Python版本的解决方法
问题概述
在M1 Mac上执行pyenv global切换Python版本后出现异常:
- 执行
pyenv global 3.10.5后,pyenv versions显示当前版本仍为anaconda3-2019.07(由/Users/{userName}/.python-version文件设置) python -V输出Python 3.7.3,但执行11 / 4得到整数结果2(符合Python2的除法行为),与显示的3.7.3版本不符
相关命令及代码输出:
% pyenv global 3.10.5 % pyenv versions system 3.10.5 3.5.4 * anaconda3-2019.07 (set by /Users/{userName}/.python-version) % python -V Python 3.7.3
a = 11 / 4 print(a) # 预期输出2.75,实际输出2
% python -u test.py 2
原因分析
- pyenv版本优先级冲突:pyenv的版本生效优先级为「local(当前目录的
.python-version)> global(全局设置)」,当前目录的.python-version文件直接覆盖了global设置。 - pyenv未正确注入Shell环境:
python命令可能未指向pyenv管理的shims版本,而是直接调用了系统或anaconda自带的Python,且存在Python2路径干扰。 - 版本显示与实际运行不符:
python -V显示的3.7.3可能是anaconda的版本,但实际执行时可能因路径优先级或别名设置,调用了Python2。
解决步骤
1. 解除local版本的覆盖
- 若不需要当前目录的local版本限制,直接删除该文件:
rm /Users/{userName}/.python-version - 若需要保留local版本,手动设置为目标版本:
执行后用pyenv local 3.10.5pyenv versions验证,应显示* 3.10.5。
2. 检查并修复pyenv的Shell配置
M1 Mac默认使用zsh,确保~/.zshrc中包含以下配置(bash则修改~/.bash_profile):
export PYENV_ROOT="$HOME/.pyenv" command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)"
- 若配置缺失,添加后重新加载Shell配置:
source ~/.zshrc - 验证PATH优先级:执行
echo $PATH,确认$HOME/.pyenv/shims在路径最前端(确保pyenv的shims比系统Python路径优先)。
3. 验证实际运行的Python版本
在测试代码中添加版本打印,确认真实运行的版本:
import sys print(sys.version) a = 11 / 4 print(a)
执行后若输出3.10.5及2.75,说明版本切换生效。
4. 检查别名干扰
执行alias python,若输出类似alias python='python2',则说明存在别名覆盖,删除该别名:
unalias python
也可在~/.zshrc中找到对应别名配置并删除,避免下次启动Shell时再次生效。
内容的提问来源于stack exchange,提问作者kkkk
相关产品推荐
相关产品推荐

