如何强制Ansible使用Python3?执行win_ping时遇winrm模块错误
解决Ansible强制使用Python3及winrm模块找不到的问题
一、核心问题梳理
ansible-playbook --version显示的是控制节点上Ansible自身依赖的Python版本,和ansible_python_interpreter参数无关——该参数仅用于指定远程Linux节点执行模块时的Python解释器,对控制节点的Ansible运行环境无效。winrm or requests is not installed报错,本质是控制节点的Python环境中缺少这两个库(Windows模块由控制节点通过WinRM协议发起请求,依赖控制节点的对应库)。
二、让控制节点的Ansible使用Python3
方式1:用Python3的pip重新安装Ansible
- 卸载旧版本(若之前通过Python2的pip安装):
pip uninstall ansible -y - 用Python3的pip安装最新版Ansible:
pip3 install ansible - 验证版本:
此时输出的Python版本应为3.x。ansible-playbook --version
方式2:系统包管理器安装Python3版本的Ansible
如果通过apt/yum等包管理器安装,需选择Python3依赖的Ansible包:
- Debian/Ubuntu:
(sudo apt update && sudo apt install ansible-coreansible-core为Ansible核心组件,默认依赖Python3) - RHEL/CentOS:
sudo yum install ansible-core
三、解决winrm模块找不到的问题
- 确保Python3环境中安装所需库:
pip3 install pywinrm requests - 验证库安装状态:
打开Python3交互终端,执行:
无报错则说明安装正常。import winrm import requests - 确认Ansible绑定的Python解释器:
- 查看Ansible可执行文件的shebang行:
输出应为head -n1 $(which ansible-playbook)#!/usr/bin/env python3,若为python或python2,说明Ansible绑定了Python2,需重新安装(参考上述方式1)。 - 临时应急方案:用Python3绝对路径直接运行Ansible:
/usr/bin/python3 $(which ansible-playbook) your_playbook.yml
- 查看Ansible可执行文件的shebang行:
四、关于ansible_python_interpreter的补充说明
该参数仅针对远程Linux节点,用于指定节点上执行Ansible模块的Python解释器。如果你的远程节点是Windows,此参数完全无效——Windows模块通过WinRM协议执行PowerShell命令,不需要Python环境。
内容的提问来源于stack exchange,提问作者Smily
相关产品推荐
相关产品推荐

