我制作了一个工作应用程序,它成功地使用python-can模块在kvaser CAN总线上接收传入的消息。当我使用PyInstaller将这个程序转换成一个可执行文件时,终端记录了它“加载了kvaser的CAN库”。输出的.exe图形用户界面照常运行,但是程序突然不能像以前那样接收更多的CAN消息。在终端中,我打印了它捕获的错误:
“无法导入CAN接口‘kvaser’的模块can.interfaces.kvaser :没有名为‘can.interfaces.kvaser’的模块。
请注意,在我用来创建可执行文件的.spec文件中,我在顶部添加了“导入can.interfaces.kvaser”。我不确定我得到的错误是因为我没有正确使用pyinstaller,还是因为我以某种方式错误地导入了CAN依赖项,但我怀疑这可能是由于后者。有没有不同的方法来导入python-can kvaser模块,可以解决程序转换为可执行文件之前和之后的CAN功能之间的差异?
发布于 2018-07-13 21:13:38
我想通了。事实证明,PyInstaller专门将依赖项安装在要执行的主文件的顶部。导入到主文件中的其他python文件中的依赖项不会被PyInstaller检测到。我将我需要的所有导入调用添加到主文件中,并且它起作用了。
发布于 2021-06-11 19:44:29
另一种解决方案是将这些模块添加到pyInstallers隐藏导入列表中。例如:
a = Analysis(['myscript.py'],
pathex='C:\\mypath\\src'],
binaries=[],
datas=[],
hiddenimports=['can.interfaces.kvaser', 'can.interfaces.vector'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)发布于 2020-10-28 18:08:41
我在pysintaller中的矢量实现中也遇到了同样的错误,没有名为‘can.interfaces.vector’的模块“错误。
正如Erika Lu所描述的,修复方法是在主文件中添加以下行;
import can
import can.interfaces.vector那么你就不会得到错误;
bus = can.interface.Bus(interface='vector', app_name....)https://stackoverflow.com/questions/51312059
复制相似问题