Pyinstaller 可执行文件不起作用

Posted

技术标签:

【中文标题】Pyinstaller 可执行文件不起作用【英文标题】:Pyinstaller Executable is not working 【发布时间】:2017-11-19 01:40:59 【问题描述】:

我一直在使用 pyinstaller 制作 .exe 文件以退出很长时间。我已经制作了一些 .exe 文件并将其分发到所有工作正常

今天我创建了一个应用程序来从多个 .html 文件中读取表格并创建一个合并的 excel 文件。

脚本运行正常,但我无法将该代码转换为 .exe 文件。我安装了 pyinstaller 和所有依赖项,并且能够将其他代码转换为 .exe。它只是这个不起作用

请检查下面的代码

import sys
import os
import pandas as pd
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog
from PyQt5.QtGui import QIcon

class Window(QtWidgets.QWidget):
def __init__(self):
    super().__init__()
    self.init_ui(self)
def init_ui(self,Consolidate):
    Consolidate.setObjectName("Consolidate")
    Consolidate.resize(410, 300)
    self.progressBar = QtWidgets.QProgressBar(Consolidate)
    self.progressBar.setGeometry(QtCore.QRect(20, 220, 381, 23))
    self.progressBar.setProperty("value", 0)
    self.progressBar.setObjectName("progressBar")
    self.pushButton = QtWidgets.QPushButton(Consolidate)
    self.pushButton.setGeometry(QtCore.QRect(320, 30, 51, 21))
    self.pushButton.setObjectName("browse")
    self.lineEdit = QtWidgets.QLineEdit(Consolidate)
    self.lineEdit.setGeometry(QtCore.QRect(20, 30, 291, 21))
    self.lineEdit.setObjectName("lineEdit")
    self.pushButton_2 = QtWidgets.QPushButton(Consolidate)
    self.pushButton_2.setGeometry(QtCore.QRect(140, 250, 131, 41))
    self.pushButton_2.setObjectName("go")
    self.textBrowser_2 = QtWidgets.QTextEdit(Consolidate)
    self.textBrowser_2.setGeometry(QtCore.QRect(20, 70, 351, 141))
    self.textBrowser_2.setObjectName("textBrowser_2")

    self.retranslateUi(Consolidate)
    QtCore.QMetaObject.connectSlotsByName(Consolidate)

def retranslateUi(self, Consolidate):
    _translate = QtCore.QCoreApplication.translate
    Consolidate.setWindowTitle(_translate("Consolidate", "Consolidate Excel"))
    self.pushButton.setText(_translate("Consolidate", "Browse"))
    self.lineEdit.setPlaceholderText(_translate("Consolidate", "Please Browse The Target Folder"))
    self.pushButton_2.setText(_translate("Consolidate", "Go"))


    self.pushButton.clicked.connect(self.fname)
    self.pushButton_2.clicked.connect(self.go)

    folder = str()
def fname(self):
    global folder
    file = str(QFileDialog.getExistingDirectory(self, "Select Folder"))
    folder = (file)
    print (folder)
    self.lineEdit.setText(folder)

def go(self):
    import pandas as pd
    dflist = list()

    for file in os.listdir(folder):
        path = os.path.join(folder, file)
        if os.path.isdir(path) or file == "QtoolAssigned.xlsx":
            continue
        else:
            print(file)
            self.textBrowser_2.append(file[7:-28])

            df = pd.read_html(path)
            df = df[0].dropna(axis=0, thresh=4)
            df['Team Name'] = str(file[7:-28])

            dflist.append(df)
        concatdf = pd.concat(dflist,axis=0)

    concatdf.to_excel(folder+'\\'+'QtoolAssigned.xlsx', index=None)
    self.progressBar.setProperty("value",100)

if __name__=='__main__':
app = QtWidgets.QApplication(sys.argv)
ex = Window()
ex.show()
app.exec_()
sys.exit(app.exec_())

【问题讨论】:

您希望看到什么,而您看到的是什么诊断信息? 我期待一个 UI,我可以在其中浏览一些文件并在输出中获取合并文件,但我收到了错误消息......“执行失败。主” 【参考方案1】:

您的应用没有运行,因为您的应用存在错误。您没有向我们提供可以让我们确定错误所在的堆栈跟踪。您没有告诉我们您是如何调用 pyinstaller 来构建应用程序的。

请按照以下建议获取堆栈跟踪:https://github.com/pyinstaller/pyinstaller/issues/2015#issuecomment-222408252

将您的应用程序作为 .exe 运行将在与脚本不同的环境中发生,因此导入和动态链接将发生不同的情况。您可能会发现,根据过去的成功,从一个您知道有效的全新测试脚本开始,然后从失败的脚本中一个接一个地引入新功能,直到遇到破坏事物的项目,您可能会发现它很有帮助。我们目前的模糊问题描述很难更具体,因为我们看不到您所看到的。花一点时间调试应该很快就会发现你的应用程序的麻烦部分。

【讨论】:

以上是关于Pyinstaller 可执行文件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PyInstaller ModuleNotFoundError --paths 标志似乎不起作用

Pyinstaller 可执行文件打开并立即关闭

Python 命令行参数以及代码编译发布为可执行文件

Python 命令行参数以及代码编译发布为可执行文件

Pyinstaller - 通过 .bat 文件隐藏和运行可执行文件

pyinstaller 模块-python文件生成exe可执行文件