我正在使用以下内容:
我的代码非常简单,其核心如下:
def snmpv2Get(ip_address):
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData(snmpv2Community),
UdpTransportTarget([ip_address, 161]),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0')),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.2.0')),
lookupMib=False)
)
使用pyinstaller将代码转换为可执行文件时,尝试运行生成的可执行文件时出现此错误:
pysnmp.smi.error.MibNotFoundError: No module __SNMP-FRAMEWORK-MIB loaded at <pysnmp.smi.builder.MibBuilder object at 0x000002788101EA20>
我用于pyinstaller的命令如下:
pyinstaller -y -F -i "icon.ico" SNMP.py --hidden-import="pysnmp.smi.mibs,pysnmp.smi.mibs.instances,pysnmp.smi.exval,pysnmp.cache"
老实说,我不想修改* .spec文件,因为每次修改它时,该命令都会覆盖* .spec内容,我不知道为什么。
请注意,避免此“无模块”错误的正确命令行是什么。我已经看到许多线程具有类似的错误消息,但是它们都处理* .spec文件,我要寻找的是在Windows上使用的正确命令行,而不是* .spec文件。
答案 0 :(得分:0)
PyInstaller似乎无法自行解决pysnmp
,因此一个简单的解决方案是使用Tree
类并将库目录嵌入可执行文件中。生成spec
文件后,添加Tree类。因此,您的spec文件应该看起来像这样(切记要根据您的Python路径替换模块路径):
# -*- mode: python -*-
block_cipher = None
a = Analysis(
...
)
a.datas += Tree("./env/Lib/site-packages/pysnmp", prefix='pysnmp')
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
...
最后使用以下命令生成可执行文件(我建议您不要使用与模块名称相同的脚本名称):
pyinstaller script.spec
答案 1 :(得分:0)
这是我的* .spec文件的内容,对于pysnmp和pyinstaller来说效果很好:
ember-auto-import