pysnmp.smi.error.MibNotFoundError: Нет модуля __SNMP-FRAMEWORK-MIB, загруженного в объект <pysnmp.smi.builder.MibBuilder в 0x0418A110>
Я только начинаю в Python, поэтому, пожалуйста, потерпите меня. Последние 3 дня я пытался найти решение этой ошибки в Google, Stack Overflow, Github, python.org, а также на snmplabs.com. Я прогрессировал от других ошибок (частично благодаря вышеперечисленным веб-сайтам), но эта ошибка поставила меня в тупик, и я не могу решить ее.
Я использую следующие версии: Windows 10 Enterprise 64-bit python 3.6, pysnmp 4.4.4, pyasn1 0.2.3 и использую paramiko для ssh и tkinter в качестве графического интерфейса. Мой проект составлен с использованием Visual Studio Code v1.20,1
По сути, я создал приложение Python, которое подключается к коммутатору cisco и добавляет vlan в транк, заменяет его другим vlan или удаляет оба vlan.
Каждый раз, когда выполняется одно из этих изменений vlan, скрипт отправляет ловушку snmp в NMS, сообщая, что только что было сделано. Ловушка - это просто 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'
],
},
}
* Пожалуйста, игнорируйте странные отступы, так как я пытался получить правильный формат для представления здесь
Извиняюсь, но, хотя я много читал об этом за последние несколько дней, я не совсем разбираюсь в таких вещах, как пакеты, модули, опции и включения, так что все это немного чуждо мне.
Если кто-то может увидеть, где я иду не так, или мне нужно предоставить больше информации, пожалуйста, дайте мне знать. Любая помощь будет высоко ценится. Спасибо
1 ответ
С некоторой большой помощью snippsat на python-forum я наконец-то начал работать. По сути, cx_freeze не будет играть хорошо, поэтому мы в конечном итоге использовали pyinstaller с небольшим изменением файла spec ( как подробно описано на python-forum), и все теперь работает.