pyinstaller后不能运行的问题处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyinstaller后不能运行的问题处理相关的知识,希望对你有一定的参考价值。

参考技术A 有时候将.py文件打包成.exe文件后,不一定能够正常运行。但是点.exe后程序一闪而退,就不知道问题出在哪里?

从上图中,可以看出由于文件找不到导致程序出错。
从这里也可以大致了解下pyinstaller成可执行程序的流程是:
会将exe解压到系统某处(图中为AppData/Local/Temp下),然后解释执行。

https://gist.github.com/GaryLee/d191f239acf2f47bec93

在工程下创建 hook-jsonrpcclient.py

然后使用如下命令打包:

[参考]
https://pythonhosted.org/PyInstaller/spec-files.html#adding-data-files
https://pyinstaller.readthedocs.io/en/stable/usage.html
https://pythonhosted.org/PyInstaller/hooks.html

Python 脚本在定期运行时工作正常,但在使用 PyInstaller 编译时不能正常运行

【中文标题】Python 脚本在定期运行时工作正常,但在使用 PyInstaller 编译时不能正常运行【英文标题】:Python script works fine when run regularly, but not when compiled with PyInstaller 【发布时间】:2019-01-28 15:50:55 【问题描述】:

我有一个脚本可以生成一个根据某些按钮进行更改的 UI。 当我独立运行我的脚本时,它从头到尾都运行良好。

问题是,当我使用 PyInstaller 编译它时(我使用一个文件或窗口),GUI 在抛出此错误时中断:

    invalid command name "1940661235784UpdateUI"
    while executing
"1940661235784UpdateUI"
    ("after" script)
 at load function
Exception in Tkinter callback
Traceback (most recent call last):
  File "tkinter\__init__.py", line 1705, in __call__
  File "UserInputs.py", line 614, in <lambda>
  File "UserInputs.py", line 921, in ShowLoadMenu
IndexError: list index out of range

如果此代码在 pyinstaller 之前有效,那么可能导致这种不一致行为的原因是什么?

【问题讨论】:

我在pyinstaller Supported packages 的支持包列表中没有看到tkinter 我也看到了,但它确实支持 tkinter。发现问题在于,由于它在新目录中编译,因此没有使用我在代码中编写的相对路径。改变它修复它。 【参考方案1】:

PyInstaller 编译到包含所有依赖项的 dist 文件夹,因为我在代码中使用相对路径,新文件夹试图从不存在的内容中提取。

【讨论】:

以上是关于pyinstaller后不能运行的问题处理的主要内容,如果未能解决你的问题,请参考以下文章

Pyinstaller打包配置UPX缩小程序包大小,打包时出现UPX is not available处理方法

Pyinstaller打包配置UPX缩小程序包大小,打包时出现UPX is not available处理方法

甚至在完成后仍运行无限子进程的多处理模块

Pyinstaller打包

Python 脚本在定期运行时工作正常,但在使用 PyInstaller 编译时不能正常运行

PyInstaller 构建的 Windows EXE 因多处理而失败