Python调用Ansible Playbook报错:找不到ansible_collections.ansible.builtin模块
解决Ansible Playbook执行时
ansible_collections.ansible.builtin模块找不到的问题 问题根源说明
ansible_collections.ansible.builtin这个路径本身就是错误的——ansible-core内置的builtin模块并不在集合目录下,而是直接位于ansible.builtin路径下。你看到的报错大概率是Playbook或脚本里的模块引用路径写错了,或者Ansible环境加载逻辑出了问题。
具体解决方案
1. 修正Playbook中的模块引用
检查你的Playbook,把所有错误的模块路径修正:
- 错误写法:
module: ansible_collections.ansible.builtin.command - 正确写法:
module: ansible.builtin.command或直接简写为module: command(builtin模块默认无需前缀)
2. 确认Python环境与Ansible安装的一致性
在你的Python脚本开头添加以下代码,验证当前脚本使用的Python解释器和安装ansible/ansible-core的环境是否一致:
import sys print(sys.executable)
如果输出的路径和你执行pip install ansible时的Python路径不一致,说明脚本用了错误的虚拟环境或全局环境,切换到正确环境即可。
3. 规范PlaybookExecutor的初始化代码
确保脚本中正确初始化Ansible的核心组件,避免路径加载异常。示例代码如下:
from ansible.executor.playbook_executor import PlaybookExecutor from ansible.inventory.manager import InventoryManager from ansible.parsing.dataloader import DataLoader from ansible.vars.manager import VariableManager # 初始化核心组件 loader = DataLoader() inventory = InventoryManager(loader=loader, sources='localhost,') variable_manager = VariableManager(loader=loader, inventory=inventory) # 初始化PlaybookExecutor pb_executor = PlaybookExecutor( playbooks=['你的playbook路径.yml'], inventory=inventory, variable_manager=variable_manager, loader=loader, passwords={} ) # 执行Playbook result_code = pb_executor.run()
4. 重新安装ansible-core确保完整性
如果以上步骤都无效,可能是ansible-core安装损坏,执行以下命令重装:
pip uninstall ansible-core -y pip install ansible-core==2.15.2
重装后检查site-packages/ansible/builtin目录是否存在,该目录下应包含所有内置模块文件。
内容的提问来源于stack exchange,提问作者an28
相关产品推荐
相关产品推荐

