Nornir 3.30对比2.8.3的变更及导入相关报错问题咨询
Nornir 2.8.3 升级到3.3.0 核心变更与问题解决
核心变更点
- 初始化方式重构:2.x版本的
init_nornir(小写函数)被替换为3.x的InitNornir(驼峰命名类),导入路径保持from nornir import InitNornir,旧的小写函数名不再支持。 - 插件体系拆分:3.x移除了内置的
nornir.plugins模块,所有第三方插件(如netmiko、textfsm等)独立为单独的PyPI包,需单独安装后导入。 - 任务调用语法微调:
nr.run()建议显式指定task参数,写法更规范。
逐个问题解决
无法找到Nornirinit相关文件
3.x版本不再提供单独的Nornirinit文件,初始化逻辑已整合到核心的InitNornir类中,直接通过该类完成Nornir实例初始化即可。netmiko_send_command无法导入
- 先安装独立的netmiko插件包:
pip install nornir-netmiko - 修正导入路径:
from nornir_netmiko.tasks import netmiko_send_command
- 先安装独立的netmiko插件包:
ImportError: cannot import name 'Initnornir' from 'nornir'
- 大小写错误:3.x的正确类名为
InitNornir(首字母大写,驼峰格式),而非Initnornir。 - 正确导入语句:
from nornir import InitNornir
- 大小写错误:3.x的正确类名为
代码执行异常
原代码存在多处语法和逻辑错误,修正后的完整代码如下:# 导入正确的模块 from nornir import InitNornir from nornir_netmiko.tasks import netmiko_send_command from nornir_utils.plugins.functions import print_result # 初始化Nornir实例(调用InitNornir类,传入配置文件路径) nr = InitNornir(config_file="config.yml") # 执行任务,显式指定task参数 result = nr.run(task=netmiko_send_command, command_string="sh ip int brief") # 打印任务结果 print_result(result)注意:需提前安装
nornir-utils包来使用print_result:pip install nornir-utils
内容的提问来源于stack exchange,提问作者Madmandrd
相关产品推荐
相关产品推荐

