Я только начинаю изучать Python, поэтому, пожалуйста, поддержите меня. Я пытался найти решение этой ошибки в течение последних 3 дней в Google, Stack Overflow, Github, python.org, а также snmplabs.com. Я перешел от других ошибок (отчасти благодаря вышеуказанным веб-сайтам), но эта поставила меня в тупик, и я не могу ее решить.
Я использую следующие версии: Windows 10 Enterprise, 64-разрядная версия 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 для создания исполняемого файла моего маленького приложения, все работает, КРОМЕ ловушки 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'
],
},
}
* Пожалуйста, не обращайте внимания на странные отступы, так как я пытался получить правильный формат для представления его здесь.
Извините, но, хотя я много читал об этом за последние несколько дней, я не совсем разбираюсь в таких вещах, как пакеты, модули, опции и включения, поэтому все это немного чуждо мне.
Если кто-то может увидеть, где я ошибаюсь, или если мне нужно предоставить дополнительную информацию, пожалуйста, дайте мне знать. Любая помощь будет высоко оценена. Спасибо
__SNMP-FRAMEWORK-MIB.py
(как и другие в каталогеinstances
) не был включен в ваш файл .exe. Если это так, это относится к инструменту cx-freeze, поэтому вам, вероятно, следует спросить там. Имейте в виду, что pysnmp явно не импортирует эти файлы, а загружает их во время выполнения. - person Ilya Etingof   schedule 17.02.2018