Windows-Pyinstaller错误"无法执行脚本"当应用单击时

aBi*_*ist 23 python windows tkinter pyinstaller

我正在克服这个错误的困难时期,我已经到处搜索该错误消息,似乎与我的情况无关:

"failed to execute script new-app" 
Run Code Online (Sandbox Code Playgroud)

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

pyinstaller.exe --onedir --hidden-import FileDialog --windowed --noupx new-app.py
Run Code Online (Sandbox Code Playgroud)

它运作顺利.另外,当我执行命令行来运行gui程序时,它运行正常,并使用以下命令生成GUI:

.\dist\new-app\new-app.exe
Run Code Online (Sandbox Code Playgroud)

但是当我去那个文件希望能够点击应用程序来获取GUI时,它会给我上面说的错误.这是为什么?

我使用的是python2.7,操作系统是Windows 7企业版.

任何输入将受到赞赏,并提前感谢.

aBi*_*ist 28

好吧,我想我已经为自己的问题找到了解决方案,以下是我的方法:

虽然我能够使用普通的python命令成功运行程序,并且能够成功运行pyinstaller并能够使用问题中提到的命令行执行应用程序"new_app.exe",在这两种情况下都显示GUI没有问题一点都不 但是,只有当我单击应用程序时,它才会显示GUI并且不会生成错误.

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

当我从第一个位置运行脚本或甚至使用命令行"./"时它抱怨并且没有抱怨的原因是因为文件图像存在于与脚本相同的路径中但是当pyinstaller创建"dist"时有一个应用程序产品的目录,它完全意识到图像文件不存在,所以我基本上把它移动到那个可点击的应用程序在那里的dist目录!


mon*_*nti 11

就我而言,我有一个与其他文件有依赖关系的 main.py。在我使用以下命令使用 py 安装程序构建该应用程序后:

pyinstaller --onefile --windowed main.py
Run Code Online (Sandbox Code Playgroud)

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

  • @hamedbaziyad 只需将 exe 文件从“dist”文件夹移动到“dist”文件夹的父级。 (3认同)

小智 9

在脚本的开头添加此函数:

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)
Run Code Online (Sandbox Code Playgroud)

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

resource_path('myimage.gif')
Run Code Online (Sandbox Code Playgroud)

然后使用这个命令:

pyinstaller --onefile --windowed --add-data todo.ico;. script.py
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请访问此文档页面


Jac*_*IRR 6

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

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

  2. 清理相关文件夹和规范文件:

rmdir /s /q dist

rmdir /s /q build

del /s /q my_service.spec

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


小智 5

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

希望这对某人有帮助。

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

"my_file.png"
Run Code Online (Sandbox Code Playgroud)

当我调用文件时。

pyinstaller 不喜欢这个,因为即使我从同一个文件夹运行它,它也期待一个完整的路径:

"C:\Files\my_file.png"
Run Code Online (Sandbox Code Playgroud)

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