You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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即可。
  • 配置打包时自动包含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:57:07