使用Roots栈搭建WordPress时Ansible 2.4报错:No module named six
解决Roots栈部署中Ansible的
No module named six错误 我之前在使用Roots栈(Vagrant+Ansible+VirtualBox)搭建WordPress时也碰到过一模一样的问题——降级到Ansible 2.3确实能暂时绕开错误,但新项目需要的高版本功能就用不了了。其实这个问题的根源不是Ansible版本本身,而是Ansible 2.4及以上版本依赖的Pythonsix模块缺失或版本不兼容,下面是几个不用降级就能解决的办法:
方法1:直接安装/升级six模块
这是最直接的解决方案,通过pip给系统安装或更新six模块:
# 针对Python2环境 sudo pip install --upgrade six # 如果你的系统默认用Python3,就用pip3 sudo pip3 install --upgrade six
执行完这条命令后,重新运行vagrant up,应该就能正常完成部署,同时保留Ansible 2.4+的所有功能。
方法2:用虚拟环境隔离Ansible版本(适合多项目场景)
如果你的不同项目需要不同版本的Ansible,不想因为全局版本冲突头疼,可以用Python虚拟环境来分开管理:
- 先安装虚拟环境工具:
sudo pip install virtualenv
- 切换到你的Trellis项目目录,创建一个专属虚拟环境:
cd /home/myuser/Sites/example.com/trellis virtualenv ansible-env
- 激活虚拟环境(不同系统命令略有不同):
# Linux/macOS source ansible-env/bin/activate # Windows系统 ansible-env\Scripts\activate
- 在虚拟环境里安装需要的Ansible版本和依赖:
pip install ansible>=2.4 six
之后每次操作这个项目时,先激活虚拟环境再运行vagrant up,既满足新项目的版本要求,也不会影响其他项目的环境。
方法3:确认Ansible使用的Python环境
有时候Ansible会调用系统里的另一个Python环境,导致找不到已经安装的six模块。你可以先查看Ansible当前使用的Python路径:
ansible --version
输出里会显示类似python version = 2.7.18 (default, ...)的内容,找到对应的Python执行路径,然后针对这个环境安装six:
# 比如路径是/usr/bin/python2.7,就执行 sudo /usr/bin/python2.7 -m pip install --upgrade six
验证操作
完成上面任意一种方法后,重新执行:
vagrant up
应该就能顺利走完Roots栈的部署流程,不用再被迫降级Ansible啦。
内容的提问来源于stack exchange,提问作者Spencer Hill
相关产品推荐
相关产品推荐

