You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible network_cli未使用虚拟环境Python的问题求助

解决Ansible强制使用系统Python而非pyenv/Poetry虚拟环境的问题

核心问题分析

错误提示明确显示:Ansible调用cisco.ios.ios_facts模块时,使用了系统级的/usr/bin/python3,而非你通过pyenv/Poetry搭建的虚拟环境Python,导致找不到已安装的ansible-pylibssh依赖。即使配置了ansible_python_interpreter仍无效,大概率是配置路径不正确或Ansible未继承虚拟环境上下文。

解决方案

1. 获取虚拟环境的真实Python路径

不要使用which python返回的shims路径(/root/.pyenv/shims/python),直接获取Poetry虚拟环境的实际Python路径:

poetry run which python

输出示例:/root/.pyenv/versions/3.11.6/envs/ansible-env/bin/python

2. 正确配置ansible_python_interpreter

将上述真实路径写入group_vars/switches.yml,覆盖原有配置:

---
ansible_connection: ansible.netcommon.network_cli
ansible_network_os: cisco.ios.ios
ansible_network_cli_ssh_type: libssh
ansible_python_interpreter: "/root/.pyenv/versions/3.11.6/envs/ansible-env/bin/python"

也可以在inventory文件中针对交换机组单独配置:

[switches]
REDACTED ansible_host=你的交换机IP ansible_python_interpreter=/root/.pyenv/versions/3.11.6/envs/ansible-env/bin/python

3. 通过Poetry上下文运行Ansible

确保Ansible完全运行在虚拟环境中,不要直接调用ansible-playbook,而是用Poetry启动:

poetry run ansible-playbook your_playbook.yml

如果需要sudo权限(比如读取系统敏感文件),添加-E参数保留环境变量:

sudo -E poetry run ansible-playbook your_playbook.yml

4. 验证依赖安装状态

确认ansible-pylibssh确实在虚拟环境中:

poetry run pip list | grep ansible-pylibssh

如果未找到,重新执行poetry install确保所有依赖完成安装。

额外注意事项

  • Debian 12默认限制系统pip直接安装包是正常设计,无需修改,所有依赖通过Poetry管理即可。
  • 避免混用系统Python和虚拟环境Python,所有Ansible相关操作都要在Poetry激活的环境中执行(或用poetry run前缀)。

内容的提问来源于stack exchange,提问作者Taavi Ansper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:35:18