记录pyinstaller打包过程中遇到的坑

打包的过程主要参考PyInstaller打包详解

多线程bug

build过程不报错,运行exe之后弹出空的命令行窗口,调出任务管理器发现main.exe在不停的启动进程。
在这里插入图片描述
查阅pyinstaller文档之后发现可以开启debug模式,把 main.spec文件修改为debug=True,然后重新

pyinstaller main.spec

生成debug模式的可执行文件,双击运行main.exe后打印出命令行,可以看到程序抽风,反复的调用我的main.py

[8828] PyInstaller Bootloader 3.x
[8828] LOADER: executable is E:\code\vision_sensor\dist\main\main.exe
[8828] LOADER: homepath is E:\code\vision_sensor\dist\main
[8828] LOADER: _MEIPASS2 is NULL
[8828] LOADER: archivename is E:\code\vision_sensor\dist\main\main.exe
[8828] LOADER: No need to extract files to run; setting extractionpath to homepath
[8828] LOADER: SetDllDirectory(E:\code\vision_sensor\dist\main)
[8828] LOADER: Already in the child - running user's code.
[8828] LOADER: Python library: E:\code\vision_sensor\dist\main\python37.dll
[8828] LOADER: Loaded functions from Python library.
[8828] LOADER: Manipulating environment (sys.path, sys.prefix)
[8828] LOADER: sys.prefix is E:\code\vision_sensor\dist\main
[8828] LOADER: Pre-init sys.path is E:\code\vision_sensor\dist\main\base_library.zip;E:\code\vision_sensor\dist\main
[8828] LOADER: Setting runtime options
[8828] LOADER: Initializing python
[8828] LOADER: Overriding Python's sys.path
[8828] LOADER: Post-init sys.path is E:\code\vision_sensor\dist\main\base_library.zip;E:\code\vision_sensor\dist\main
[8828] LOADER: Setting sys.argv
[8828] LOADER: setting sys._MEIPASS
[8828] LOADER: importing modules from CArchive
[8828] LOADER: extracted struct
[8828] LOADER: callfunction returned...
[8828] LOADER: extracted pyimod01_os_path
[8828] LOADER: callfunction returned...
[8828] LOADER: extracted pyimod02_archive
[8828] LOADER: callfunction returned...
[8828] LOADER: extracted pyimod03_importers
[8828] LOADER: callfunction returned...
[8828] LOADER: Installing PYZ archive with Python modules.
[8828] LOADER: PYZ archive: PYZ-00.pyz
[8828] LOADER: Running pyiboot01_bootstrap.py
[8828] LOADER: Running pyi_rth__tkinter.py
[8828] LOADER: Running pyi_rth_traitlets.py
[8828] LOADER: Running pyi_rth_pkgres.py
[8828] LOADER: Running pyi_rth_win32comgenpy.py
[8828] LOADER: Running pyi_rth_pyqt5.py
[8828] LOADER: Running pyi_rth_mplconfig.py
[8828] LOADER: Running pyi_rth_mpldata.py
[8828] LOADER: Running pyi_rth_multiprocessing.py
[8828] LOADER: Running main.py
[20904] PyInstaller Bootloader 3.x
[20904] LOADER: executable is E:\code\vision_sensor\dist\main\main.exe
[20904] LOADER: homepath is E:\code\vision_sensor\dist\main
[20904] LOADER: _MEIPASS2 is E:\code\vision_sensor\dist\main
[20904] LOADER: archivename is E:\code\vision_sensor\dist\main\main.exe
[20904] LOADER: SetDllDirectory(E:\code\vision_sensor\dist\main)
[20904] LOADER: Already in the child - running user's code.
[20904] LOADER: Python library: E:\code\vision_sensor\dist\main\python37.dll
[20904] LOADER: Loaded functions from Python library.
[20904] LOADER: Manipulating environment (sys.path, sys.prefix)
[20904] LOADER: sys.prefix is E:\code\vision_sensor\dist\main
[20904] LOADER: Pre-init sys.path is E:\code\vision_sensor\dist\main\base_library.zip;E:\code\vision_sensor\dist\main
[20904] LOADER: Setting runtime options
[20904] LOADER: Initializing python
[20904] LOADER: Overriding Python's sys.path
[20904] LOADER: Post-init sys.path is E:\code\vision_sensor\dist\main\base_library.zip;E:\code\vision_sensor\dist\main
[20904] LOADER: Setting sys.argv
[20904] LOADER: setting sys._MEIPASS
[20904] LOADER: importing modules from CArchive
[20904] LOADER: extracted struct
[20904] LOADER: callfunction returned...
[20904] LOADER: extracted pyimod01_os_path
[20904] LOADER: callfunction returned...
[20904] LOADER: extracted pyimod02_archive
[20904] LOADER: callfunction returned...
[20904] LOADER: extracted pyimod03_importers
[20904] LOADER: callfunction returned...
[20904] LOADER: Installing PYZ archive with Python modules.
[20904] LOADER: PYZ archive: PYZ-00.pyz
[20904] LOADER: Running pyiboot01_bootstrap.py
[20904] LOADER: Running pyi_rth__tkinter.py
[20904] LOADER: Running pyi_rth_traitlets.py
[20904] LOADER: Running pyi_rth_pkgres.py
[20904] LOADER: Running pyi_rth_win32comgenpy.py
[20904] LOADER: Running pyi_rth_pyqt5.py
[20904] LOADER: Running pyi_rth_mplconfig.py
[20904] LOADER: Running pyi_rth_mpldata.py
[20904] LOADER: Running pyi_rth_multiprocessing.py
[20904] LOADER: Running main.py
[3940] PyInstaller Bootloader 3.x
[3940] LOADER: executable is E:\code\vision_sensor\dist\main\main.exe
[3940] LOADER: homepath is E:\code\vision_sensor\dist\main
[3940] LOADER: _MEIPASS2 is E:\code\vision_sensor\dist\main
[3940] LOADER: archivename is E:\code\vision_sensor\dist\main\main.exe
[3940] LOADER: SetDllDirectory(E:\code\vision_sensor\dist\main)
[3940] LOADER: Already in the child - running user's code.
[3940] LOADER: Python library: E:\code\vision_sensor\dist\main\python37.dll
[3940] LOADER: Loaded functions from Python library.
[3940] LOADER: Manipulating environment (sys.path, sys.prefix)
[3940] LOADER: sys.prefix is E:\code\vision_sensor\dist\main
[3940] LOADER: Pre-init sys.path is E:\code\vision_sensor\dist\main\base_library.zip;E:\code\vision_sensor\dist\main
[3940] LOADER: Setting runtime options
[3940] LOADER: Initializing python
[3940] LOADER: Overriding Python's sys.path
[3940] LOADER: Post-init sys.path is E:\code\vision_sensor\dist\main\base_library.zip;E:\code\vision_sensor\dist\main
[3940] LOADER: Setting sys.argv
[3940] LOADER: setting sys._MEIPASS
[3940] LOADER: importing modules from CArchive
[3940] LOADER: extracted struct
[3940] LOADER: callfunction returned...
[3940] LOADER: extracted pyimod01_os_path
[3940] LOADER: callfunction returned...
[3940] LOADER: extracted pyimod02_archive
[3940] LOADER: callfunction returned...
[3940] LOADER: extracted pyimod03_importers
[3940] LOADER: callfunction returned...
[3940] LOADER: Installing PYZ archive with Python modules.
[3940] LOADER: PYZ archive: PYZ-00.pyz
[3940] LOADER: Running pyiboot01_bootstrap.py
[3940] LOADER: Running pyi_rth__tkinter.py
[3940] LOADER: Running pyi_rth_traitlets.py
[3940] LOADER: Running pyi_rth_pkgres.py
[3940] LOADER: Running pyi_rth_win32comgenpy.py
[3940] LOADER: Running pyi_rth_pyqt5.py
[3940] LOADER: Running pyi_rth_mplconfig.py
[3940] LOADER: Running pyi_rth_mpldata.py
[3940] LOADER: Running pyi_rth_multiprocessing.py
[3940] LOADER: Running main.py

参见pyinstaller官方文档中的描述
使用多线程模块multiprocessing时,必须在程序入口加入代码

if __name__ == '__main__':
    # Pyinstaller fix
    multiprocessing.freeze_support()
    # 以下写主要代码
    main()

这样改过之后再打包就能运行exe了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值