Windows- Pyinstaller 错误 "failed to execute script " 当应用被点击时

Windows- Pyinstaller Error "failed to execute script " When App Clicked

我很难克服这个错误,我到处搜索该错误消息,但似乎没有任何内容与我的情况相关:

"failed to execute script new-app" 

new-app 是我的 python GUI 程序。当我 运行 pyinstaller 使用此命令时:

pyinstaller.exe --onedir --hidden-import FileDialog --windowed --noupx new-app.py

它确实工作顺利。此外,当我对 gui 程序执行 运行 命令行时,它运行良好,并且使用此命令生成 GUI:

.\dist\new-app\new-app.exe

但是当我转到该文件希望能够单击该应用程序以获取 GUI 时,它给了我上述错误。这是为什么?

我正在使用 python2.7,OS 是 Windows 7 Enterprise。

如有任何意见,我们将不胜感激,并在此先致谢。

好吧,我想我已经找到了我自己问题的解决方案,我是这样做的:

尽管我能够使用正常的 python 命令成功地 运行 程序以及成功地 运行 pyinstaller 并且能够执行应用程序“new_app.exe ” 使用问题中提到的命令行,在这两种情况下都可以毫无问题地显示 GUI。但是,只有当我单击应用程序时,它才会允许显示 GUI,并且不会生成错误。

所以,我所做的是在 pyinstaller 命令中添加了一个额外的参数 --debug 并删除了 --windowed 参数,这样我就可以看到当应用程序被点击时实际发生了什么,我发现有当我跟踪它时,这个错误很有意义,它基本上抱怨说 "some_image.jpg" 没有这样的文件或目录.

当我从一开始 运行 脚本甚至使用命令行 "./" 时它抱怨和不抱怨的原因是因为文件图像存在于与脚本位于,但是当 pyinstaller 创建了包含应用产品的“dist”目录时,很明显图像文件不存在,所以我基本上将它移到了可点击应用所在的 dist 目录!

所以简单的答案是将代码使用的所有媒体文件或文件夹放在 exe 文件所在的目录中。

第二种方法是在pyinstaller命令中添加“--add-data ”(这可以多次使用来添加不同的文件)选项这将自动将给定的文件或文件夹放入 exe 文件夹。

在脚本开头添加此函数:

import sys, os 
    def resource_path(relative_path):
        if hasattr(sys, '_MEIPASS'):
            return os.path.join(sys._MEIPASS, relative_path)
        return os.path.join(os.path.abspath("."), relative_path)

通过调用函数 resource_path() 来引用您的数据文件,如下所示:

resource_path('myimage.gif')

然后使用这个命令:

pyinstaller --onefile --windowed --add-data todo.ico;. script.py

有关详细信息,请访问此 documentation page

如果有人没有从其他答案中得到结果,我通过以下方式解决了类似的问题:

  1. 根据需要为任何缺失的模块添加 --hidden-import 标志

  2. 正在清理关联的文件夹和规范文件:

rmdir /s /q dist

rmdir /s /q build

del /s /q my_service.spec

  1. 运行 以管理员身份安装的命令

我遇到了同样的错误,发现我是使用 Anaconda 编写脚本的,但是 pyinstaller 试图在纯 python 上打包脚本。因此,pythons 库文件夹中不存在的模块会导致此问题。

该错误是由于 pyinstaller 中缺少模块。您可以通过可执行命令行中的 运行 脚本找到丢失的模块,即从命令中删除“-w”。一旦您创建了命令行可执行文件,那么在命令行中它将显示缺少的模块。通过找到那些丢失的模块,您可以将其添加到您的命令中: " --hidden-import = missingmodule "

我通过这个解决了我的问题。

我收到此错误的原因与此处列出的原因不同,并且无法轻松找到解决方案,所以我想我会 post 在这里。

希望这对某人有所帮助。

我的问题是在程序中引用文件。它无法找到列出的文件,因为当我编码它时,我在顶级目录中有我想引用的文件,只是调用

"my_file.png"

当我调用文件时。

pyinstaller 不喜欢这样,因为即使我 运行 它来自同一个文件夹,它也需要完整路径:

"C:\Files\my_file.png"

一旦我将所有路径更改为完整版本的路径,它就解决了这个问题。

在我的例子中,我有一个 main.py 与其他文件有依赖关系。在我使用此命令使用 py 安装程序构建该应用程序后:

pyinstaller --onefile --windowed main.py

我在 dist 文件夹中找到了 main.exe。我双击这个文件,我提出了上面提到的错误。 为了解决这个问题,我只是将 main.exe 从 dist 目录复制到上一个目录,这是我的 main.py 和依赖文件的根目录,并且在 运行 main.exe.

我发现了一个类似的问题,但上面 none 的答案有帮助。我找到了解决激活基础环境问题的方法。再次尝试我在没有基础的情况下所做的事情,我执行了 GUI.exe

如@Shyrtle 所述,一旦解决了我最初想添加背景图片的问题,即使 file.py 和图片本身位于同一个目录。

我遇到了类似的问题,这是因为我使用的是 anaconda 而不是在 pip 中而是在 anaconda 中安装依赖项。对我有帮助的是在 pip 中安装依赖项。

就我而言(新手级别)我忘记安装库“matplotlib”。程序在 Pycharm 中运行,但当我尝试从终端打开时却没有运行。在主目录中安装库后一切正常。