PySNMP错误:pysnmp.smi.error.SmiError

2 投票
5 回答
12521 浏览
提问于 2025-04-16 04:15

我在一台运行Windows XP的电脑上运行一个Python程序。每次我运行这个程序时,都会出现以下错误:

File "C:\Python27\lib\pysnmp\smi\builder.pyt, line 230, in loadModules...
pysnmp.smi.error.SmiError: MIB file "SNMPv2-MIB.py[co]" not found in search path

文件SNMPv2-MIB.py现在位于C:\Python27\Lib\pysnmp\smi\mibs这个位置。有没有人知道我该怎么解决这个问题?

5 个回答

2

你无法加载MIB文件。

你能检查一下:

>>> print builder.MibBuilder().getMibPath()

通常情况下,这应该没问题,因为MIB实例应该在

pysnmp/smi/mibs/instances

错误发生的代码在builder.py中

if not self.__modSeen.has_key(modName):
    raise error.SmiError(
        'MIB file \"%s\" not found in search path' % (modName and modName + ".py[co]")
            )

通常在调用loadModules之前,先在mibBuilder实例上调用setMibPath就能解决这个问题。

因为你得到的路径是

C:\Python27\lib\pysnmp\smi\mibs\instances, 
C:\Python27\lib\pysnmp\smi\mibs, 
C:\Python27\lib\pysnmp_mibs

为什么不把文件移动到这些目录之一呢? 你现在文件所在的位置

  • C:\Python27\Lib\pysnmp\smi\mibs

并不在你通过builder.MibBuilder().getMibPath()得到的路径中。

3

我刚遇到同样的问题。我提交了一个bug报告,并附上了一个修复方案:https://sourceforge.net/tracker/?func=detail&aid=3204704&group_id=14735&atid=114735

正如Sivakumar所说,问题出现的原因是pysnmp在寻找后缀为.pyc或.pyw的MIB文件。pysnmp通过imp.get_suffixes()这个函数来获取这些后缀。根据pysnmp处理这个函数返回的后缀的方式,.pyw的后缀会覆盖掉.py的后缀。我提出的修复方案就是简单地忽略.pyw这个后缀。

如果你是从.egg文件安装这个库,应该就没问题,因为.egg文件里包含了编译好的(pyc)MIB文件。

7

如果你发现缺少一个mib文件,首先要确保你已经运行过 pip install pysnmp-mibs,前提是你之前使用过 pip install pysnmp

撰写回答