Mac下pyenv管理Python版本时kubectl找不到python2求助
看起来你的问题出在gcloud在非交互式shell环境中无法访问pyenv管理的python2——虽然你在终端(交互式shell)里能正常找到python2,但kubectl调用gcloud的config-helper时,是在后台以非交互式shell执行的,这时候pyenv的环境变量可能没被正确加载。
下面是几个可行的解决方向:
确保pyenv在非交互式shell中初始化
大多数shell的交互式和非交互式加载的配置文件不一样:比如zsh的非交互式shell会加载~/.zshenv,而bash可能默认不加载~/.bashrc(除非设置了BASH_ENV)。
你需要把pyenv的初始化代码放到非交互式shell会读取的配置文件里,比如对于zsh,编辑~/.zshenv加入:export PYENV_ROOT="$HOME/.pyenv" command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)"保存后重启终端,或者直接执行
source ~/.zshenv让修改生效。直接给gcloud指定Python解释器
gcloud支持通过环境变量CLOUDSDK_PYTHON指定要使用的Python路径,绕过PATH查找的问题。你可以直接把pyenv中2.7.4版本的Python路径设给这个变量:export CLOUDSDK_PYTHON="/Users/josh/.pyenv/versions/2.7.4/bin/python"把这行加到你的shell配置文件(比如
~/.zshrc或~/.bashrc)里,这样每次启动shell都会生效,kubectl调用gcloud时也能读取到这个设置。重新生成pyenv的shims
有时候pyenv的shim文件可能损坏,导致命令找不到,执行下面的命令重新生成:pyenv rehash执行完后测试
python2 --version确认正常,再尝试kubectl命令。验证非交互式shell的环境
你可以模拟gcloud运行的非交互式环境来排查问题,比如执行:zsh -c "python2 --version && gcloud config config-helper --format=json"如果这个命令报错,说明确实是非交互式shell的环境配置问题,回到第一个方向调整pyenv的初始化位置。
内容的提问来源于stack exchange,提问作者joshua.thomas.bird

