OS X系统下awscli无法运行,始终报ImportError缺失awscli_plugin_endpoint
ImportError: No module named awscli_plugin_endpoint的问题 我之前也碰到过一模一样的糟心事!brew升级后直接把awscli的依赖环境搞乱了,尤其是这个awscli_plugin_endpoint模块的报错,本质是brew管理的Python环境和你自己用pyenv/virtualenv的环境冲突,或者旧插件残留、版本不兼容导致的。试试下面这些步骤,应该能搞定:
彻底清理brew相关的awscli残留
先把brew安装的awscli完全卸掉,避免它干扰你的自定义环境:brew uninstall awscli brew cleanup python另外可以备份并重置aws的配置文件(如果怀疑是配置里的插件引用出问题):
mv ~/.aws ~/.aws.bak用pyenv搭建干净的Python环境重装awscli
确保pyenv切换到你需要的Python版本,然后从头安装:# 切换目标Python版本 pyenv local 3.6.4 # 升级pip到最新版 pip install --upgrade pip # 安装指定版本的awscli(比如你试过的1.14.65) pip install awscli==1.14.65 # 重新安装兼容的endpoint插件 pip install awscli-plugin-endpoint装完后验证一下:
aws --version # 试一个基础命令看是否正常 aws s3 ls重置virtualenv环境(如果之前用了virtualenv)
旧的virtualenv可能已经被brew升级污染了,直接重建:# 删除旧环境 rm -rf ~/path/to/your/old-virtualenv # 基于pyenv的Python版本创建新环境 virtualenv -p $(pyenv which python) ~/path/to/new-virtualenv # 激活新环境 source ~/path/to/new-virtualenv/bin/activate # 重复上面的pip安装步骤检查PATH优先级,确保调用的是你安装的awscli
有时候brew的Python路径还在PATH前面,导致系统调用的是brew版本的awscli,检查并调整:# 查看PATH顺序 echo $PATH确保
~/.pyenv/shims在PATH的最前面,如果不是,修改你的shell配置文件(.bashrc或.zshrc),把eval "$(pyenv init -)"放在所有PATH配置的最后,保证pyenv的路径优先级最高。
如果以上步骤都不行,你可以手动找到pyenv对应Python版本的site-packages目录(比如~/.pyenv/versions/3.6.4/lib/python3.6/site-packages),删掉里面的awscli和awscli_plugin_endpoint文件夹,然后重新用pip安装一遍,应该就能彻底解决了。
内容的提问来源于stack exchange,提问作者Daniel Hiller

