python .exe无法正常运行

时间:2018-07-10 13:11:30

标签: python pyqt5 pyinstaller

我下载了pyinstaller以便将我的python脚本转换为可执行程序。我有一个主脚本((homepage.py),运行时它将显示一个带有两个按钮(button1和button2)的窗口。两个按钮中的每个按钮(如果单击)将运行其相应的python脚本(input1.py或input2.py)显示一个窗口,用户可以在其中输入要在excel中绘制图形的数据。

当我通过Anaconda在Spyder中运行脚本时,它们可以正常运行。但是,当我将主脚本(Homepage.py)转换为可执行程序并运行它时,将出现带有两个按钮的主窗口,但是当我单击两个按钮中的任何一个时,不会出现相应的窗口,并且程序将关闭。有谁知道为什么会这样?我是否需要像对homepage.py一样将input1.py和input2.py转换为.exe程序?

在我的脚本中,当我需要单击任意按钮时,我将隐藏主窗口并显示新窗口。隐藏和显示是什么导致我的程序即使在Spyder中运行也无法正常运行?

主窗口(homapge.py)导入和类名称,

from PyQt5 import QtCore, QtGui, QtWidgets
from input1 import Ui_input1
from input2 import Ui_input2

class Ui_homepage(object):

button1(input1.py)导入和类名

from PyQt5 import QtCore, QtGui, QtWidgets
import csv, os, subprocess, output1

class Ui_input1(object):

button2(input2.py)导入和类名称,

from PyQt5 import QtCore, QtGui, QtWidgets
import csv, os, subprocess, output2

class Ui_input2(object):

此外,在input1.py和input2.py两者中,我都有一个按钮函数,当单击该按钮时,它们会返回到主窗口(homepage.py),并且在我导入的该函数中,

from homepage import Ui_homepage

在homepage.py,input1.py和input2.py的末尾,我进行了导入,

if __name__ == "__main__":
    import sys

让我知道是否需要更多说明或代码。

编辑1:

我在主窗口(homepage.py)中调用button1的代码,

self.button1.clicked.connect(self.displayWindow1)

def displayWindow1(self):
    self.window = QtWidgets.QMainWindow()
    self.uiInput1 = Ui_input1()
    self.uiInput1.setupUi(self.window)
    self.homepage.hide()
    self.window.showMaximized()

我在主窗口(homepage.py)中调用button2的代码,

self.button2.clicked.connect(self.displayWindow2)

def displayWindow1(self):
    self.window = QtWidgets.QMainWindow()
    self.uiInput2 = Ui_input1()
    self.uiInput2.setupUi(self.window)
    self.homepage.hide()
    self.window.showMaximized()

编辑2

更改后我尝试运行该程序,

from input1 import Ui_input1
from input2 import Ui_input2

import input1 
import input2

在键入 pyinstaller --onefile --windowed homepage.exe 后,在命令提示符窗口中出现此错误

25160 WARNING: lib not found: MSVCR90.dll dependency of c:\users\bj914e
\appdata\local\continuum\anaconda3\Library\bin\zlib.dll

我在warnhomepage.txt文件中遇到了这些错误,

missing module named resource - imported by posix, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named posix - imported by os, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named _posixsubprocess - imported by subprocess, C:\Users
\bj914e\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named org - imported by pickle, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named readline - imported by cmd, code, pdb, C:\Users
\bj914e\Desktop\DAMS\DAMS_Version_4\homepage.py
excluded module named _frozen_importlib - imported by importlib, 
importlib.abc, C:\Users\bj914e\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named _frozen_importlib_external - imported by 
importlib._bootstrap, importlib, importlib.abc, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named _winreg - imported by platform, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named _scproxy - imported by urllib.request
missing module named java - imported by platform, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py
missing module named 'java.lang' - imported by platform, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py, xml.sax._exceptions
missing module named vms_lib - imported by platform, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named termios - imported by tty, C:\Users\bj914e\Desktop
\DAMS\DAMS_Version_4\homepage.py, getpass
missing module named grp - imported by shutil, tarfile, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named pwd - imported by posixpath, shutil, tarfile, 
http.server, webbrowser, C:\Users\bj914e\Desktop\DAMS\DAMS_Version_4
\homepage.py, netrc, getpass
missing module named _dummy_threading - imported by dummy_threading, 
C:\Users\bj914e\Desktop\DAMS\DAMS_Version_4\homepage.py
missing module named 'org.python' - imported by copy, C:\Users\bj914e
\Desktop\DAMS\DAMS_Version_4\homepage.py, xml.sax
missing module named cPickle - imported by xlsxwriter.compat_collections
missing module named cStringIO - imported by cPickle
missing module named copy_reg - imported by cPickle, cStringIO
missing module named StringIO - imported by xlsxwriter.compatibility

更新:

我能够解决我的问题。事实证明这是一个非常简单的解决方案。单击一个按钮后,程序关闭,但是一个命令提示符窗口出现并消失了,毫秒之内消失了,直到下面的解决方案中我对它没有提及。解决方案是使用.exe程序将input1.py和input2.py使用的所有数据文件的全部移到dist文件中。

P.S:某些录制程序太慢,无法记录出现和消失的窗口,因此我尝试使用智能手机(iPhone)相机,它能够检测到它。

2 个答案:

答案 0 :(得分:2)

我有一个非常类似的问题,问题是缺少模块。您的exe可能会使用pyinstaller未检测到的其他模块。对我来说,一旦我导入了十进制模块,我的exe就会像个魅力一样发挥作用!当homepage.exe关闭/崩溃时,它会告诉您缺少哪个模块。您只有一毫秒的时间可以看到它,我记录了屏幕并放慢了镜头,以查看错误消息。也许是非常规的,但对我有用!

答案 1 :(得分:0)

您似乎遇到了这个issue here(与您基本相同,但他们使用的是TKinter)。

建议(link again)是像模块一样将整个文件导入到homepage.py程序中。

所以改变:

from input1 import Ui_input1
from input2 import Ui_input2 

收件人:

import input1 
import input2 

让我知道它是如何工作的:-)