pyinstaller转换后无法打开.exe

时间:2019-07-15 18:28:13

标签: python pyinstaller

运行我使用任何IDLE或file.py在PyQt5中创建的GUI应用程序,但是,当我使用Pyinstaller将.py转换为.exe时,它运行完美。 由于某种原因,每次我尝试运行.exe文件时,都会出现错误,并弹出一个小命令窗口,并显示错误消息,然后立即消失,并在错误关闭之前对错误进行了截图。任何想法预先感谢

Error image

我尝试为pyinstaller执行不同的命令,但是没有运气。

<pyinstaller filename -F > 
<pyinstaller filename -onefile >
<pyinstaller filename >

这是一个超过900行的应用程序,我无法全部上传,但我认为是根据错误的第一行。 发生错误,因此这里是代码行。 我认为问题出在导入模块之内。

from PyQt5.QtWidgets import QWidget
from PyQt5 import QtCore, QtGui, QtWidgets
from datetime import datetime
import time
import os, sys  #importing system modules

class Ui_MyTrophiesWindow(object):
    class save_txt_file(QWidget): 
     def GetSaveFile(self):
            path = QFileDialog.getSaveFileName(self,"Save MyTrophies.txt here", "MyTrophies", "*.txt")
            working_path = os.path.abspath(__file__)[0:-13]
            file = open(str(working_path) + "Txtpath.dat", "w+")
            for i in path:
                file.write(str(i))
            file.close()

3 个答案:

答案 0 :(得分:1)

很常见的是,有时PyInstaller不能识别所有Qt5依赖项,尤其是QT核心DLL。一种简单的方法是只在当前的Python路径上找到该文件,并在PyInstaller中使用add-data标志来提供该文件。另外,我建议您不要将upx与PyQt一起使用,因为它可能会损坏某些DLL:

pyinstaller --noupx -F --add-data "<Python_path>/Lib/site-packages/PyQt5/Qt/bin/Qt5Core.dll;./PyQt5/Qt/bin" script.py

为验证答案,假设以下示例:

import traceback
import os
import sys


def func():
   from PyQt5.QtWidgets import QWidget
   from PyQt5 import QtCore, QtGui, QtWidgets


try:
   if getattr(sys, 'frozen', False):
      print(sys._MEIPASS)
   func()
   print("Import OK!")
except Exception:
   traceback.print_exc()

input()

运行可执行文件后,您将看到Pyinstaller的路径(类似C:\Users\User\AppData\Local\Temp\_MEI90202),转到此路径并搜索Qt5Core.dll,然后检查其是否存在。

答案 1 :(得分:1)

我看过您的错误,据我说,我认为您需要(重新)安装Qt5core.dll模块并将其添加到site-package / PyQt5 / init .py路径中。您可以在此处下载dll文件:

http://www.telecharger-dll.fr/dll-Qt5Core.dll.html

晚上好

答案 2 :(得分:1)

请确保该应用程序的所有项目都位于正确的文件夹中。让我举个例子,发生在我几天前:

我有一个应用程序,该应用程序的文件夹名为“ options”,具有3个文件(我的按钮ui和.ini文件2个图标)。当我创建程序的pyinstaller版本时,我假定,它将以某种方式复制这些文件并将它们打包在--onefile文件或dist文件夹中(如果未使用--onefile命令)。不,不是。 挠了几个小时之后,我只是从源文件中复制了options文件夹,并将其粘贴到我的--onefile文件旁边(或dist文件夹中)。

之后,我的应用程序正常运行。因此,请确保它在正确的文件夹中具有所需的所有文件。