pysnmp.smi.error.MibNotFoundError: No module __SNMP-FRAMEWORK-MIB loaded at <pysnmp.smi.builder.MibBuilder object at 0x0418A110>

pysnmp.smi.error.MibNotFoundError: No module __SNMP-FRAMEWORK-MIB loaded at <pysnmp.smi.builder.MibBuilder object at 0x0418A110>

我才刚开始 Python 所以请多多包涵。 在过去 3 天里,我一直在 google、Stack Overflow、Github、python.org 和 snmplabs.com 中尝试找到解决此错误的方法。我已经从其他错误中取得进展(部分归功于上述网站),但这个错误让我感到难过,我似乎无法解决它。

我运行正在使用以下版本的东西: Windows 10 企业版 64 位 python 3.6,pysnmp 4.4.4,pyasn1 0.2.3 我使用 paramiko 作为 ssh 和 tkinter 作为 GUI 我的项目是使用 Visual Studio 代码 v1.20.1

组成的

基本上我已经制作了一个 python 应用程序,它登录到 cisco 交换机并将 vlan 添加到 t运行k,用另一个 vlan 替换它,或者删除两个 vlan

每次进行这些 vlan 更改之一时,脚本都会向 NMS 发送一个 snmp 陷阱,说明刚刚完成的操作。陷阱只是一个 OID,如下所示:

def sendTrap(system):
debug.setLogger(debug.Debug('msgproc'))

next(sendNotification(SnmpEngine(),
CommunityData('blahblah'),
UdpTransportTarget(('1.1.1.1', 162)),
ContextData(),
'trap',
# sequence of custom OID-value pairs
[ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0'), OctetString(system))]))

也会发生其他一些事情,例如进行更改时的背景颜色,以及计时器开始计时,在预定的时间后重置所有内容。

当我 运行 作为 python 脚本时,程序运行完美。

但是,当我使用 cx_freeze 创建我的小应用程序的 exe 文件时,除了 snmp 陷阱之外,一切正常,我目前收到以下回溯错误:

    2018-02-17 02:17:39,956 pysnmp: running pysnmp version 4.4.4
    2018-02-17 02:17:39,957 pysnmp: debug category 'msgproc' enabled
    Exception in Tkinter callback
    Traceback (most recent call last):

      File "C:\Python\Python36-32\lib\site-packages\pysnmp\entity\engine.py", line 91, in __init__
        '__SNMP-FRAMEWORK-MIB', 'snmpEngineMaxMessageSize')
      File "C:\Python\Python36-32\lib\site-packages\pysnmp\smi\builder.py", line 409, in importSymbols
        'No module %s loaded at %s' % (modName, self)
    pysnmp.smi.error.MibNotFoundError: No module __SNMP-FRAMEWORK-MIB loaded at pysnmp.smi.builder.MibBuilder object at 0x034C9150

模块 __SNMP-FRAMEWORK-MIB 位于 C:\Python\Python36-32\Lib\site-packages\pysnmp\smi\mibs\instances 中,我将此文件夹包含在安装文件中,如下所示(现在这是我认为我出错的地方):

    options = {
'build_exe': {
    #'packages':packages,
    'include_files':[
        os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
        os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
        'C:\Python\Python36-32\Lib\site-packages\idna',
        'C:\Python\Python36-32\Lib\site-packages\pysnmp\smi\mibs',
        'C:\Python\Python36-32\Lib\site-packages\pysnmp\smi\mibs\instances'
     ],
},
    }

*请忽略奇怪的缩进,因为我试图获得正确的格式以在此处显示它

抱歉,虽然我在过去几天阅读了大量相关内容,但我对包、模块、选项和包含等内容并不完全了解,因此对我来说有点陌生。

如果有人能看出我哪里出错了,或者如果我需要提供更多信息,请告诉我。任何帮助将不胜感激。 谢谢

snippsat at python-forum 的大力帮助下,我终于可以使用它了。 基本上 cx_freeze 不会很好玩,所以我们最终使用 pyinstaller 对 "spec" 文件 (As detailed at python-forum) 稍作调整,现在一切正常。