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), и все теперь работает.

Другие вопросы по тегам