使用auto-py-to-exe打包Python脚本为exe时出现usb.core.NoBackendError
解决PyUSB打包exe后NoBackendError的问题
核心原因
auto-py-to-exe(基于PyInstaller)默认不会自动识别并打包libusb的底层动态链接库(DLL文件)。开发环境中通过环境变量指定的路径,打包后的exe无法直接读取这些外部依赖。
具体解决步骤
手动复制DLL到打包目录
找到虚拟环境中libusb的Windows平台DLL文件:- 64位系统取
\venv\Lib\site-packages\libusb\_platform\_windows\x64\libusb-1.0.dll - 32位系统取
\venv\Lib\site-packages\libusb\_platform\_windows\x32\libusb-1.0.dll
将对应DLL复制到auto-py-to-exe生成的exe所在的同一目录下,再运行exe即可。
- 64位系统取
配置打包时自动包含DLL
若不想手动复制,可在auto-py-to-exe的「Additional Files」选项中添加上述DLL,设置「Destination」为.(即与exe同目录);也可直接用PyInstaller命令行打包,添加--add-data参数:pyinstaller --onefile --add-data "venv\Lib\site-packages\libusb\_platform\_windows\x64\libusb-1.0.dll;." your_script.py注:32位系统需将路径中的
x64替换为x32。代码中手动指定后端路径(可选)
在Python脚本开头指定libusb后端的DLL路径,确保打包后能精准定位:import usb.core import usb.backend.libusb1 # 打包后DLL与exe同目录时,用相对路径即可 backend = usb.backend.libusb1.get_backend(find_library=lambda x: "./libusb-1.0.dll") dev = usb.core.find(backend=backend, idVendor=0xXXXX, idProduct=0xXXXX)
额外注意事项
- 必须保证DLL版本与系统位数匹配,否则会出现加载失败。
- 打包场景下不要依赖系统环境变量指定DLL路径,exe优先读取自身目录下的依赖,环境变量优先级不可靠。
内容的提问来源于stack exchange,提问作者DanSeeDan
相关产品推荐
相关产品推荐

