python.exe 无法正常运行

python .exe not working properly

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

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

在我的脚本中,当我需要点击任何按钮时,我会隐藏主要的 window 并显示新的 window。隐藏和显示是否会导致我的程序即使在 Spyder 中运行也无法正常运行?

main window (homapge.py) 导入和 class name,

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

class Ui_homepage(object):

button1 (input1.py) 导入和 class 名称,

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

class Ui_input1(object):

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

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

class Ui_input2(object):

此外,在 input1.py 和 input2.py 中,我有一个按钮功能,单击时 returns 到主 window (homepage.py) ,在我导入的函数中,

from homepage import Ui_homepage

在 homepage.py、input1.py 和 input2.py 的末尾我有这个导入,

if __name__ == "__main__":
    import sys

如果您需要更多说明或代码,请告诉我。

编辑 1:

我在调用 button1 的主要 window (homepage.py) 中使用的代码,

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()

我在主window(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

我在命令提示符 window 中输入 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

更新:

我能够解决我的问题。结果证明这是一个非常简单的解决方案。单击其中一个按钮后,程序关闭,但命令提示符 window 出现并在一毫秒内消失,我之前没有注意到,直到在下面的解决方案中提到它。解决方案是将 input1.py 和 input2.py 使用的 所有 数据文件移动到带有 .exe 程序的 dist 文件中。

P.S: 一些录音程序太慢,无法记录出现和消失的window,所以我用我的智能手机(iPhone)相机试了一下,它能够检测到它。

看起来你已经 运行 进入这个 issue here(基本上和你一样,但他们使用的是 TKinter)。

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

所以改变:

from input1 import Ui_input1
from input2 import Ui_input2 

收件人:

import input1 
import input2 

告诉我结果如何:-)

我有一个非常相似的问题,问题是缺少模块。您的 exe 可能使用了 pyinstaller 未检测到的其他模块。对我来说,一旦我导入了 Decimal 模块,我的 exe 就像一个魅力!当您的 homepage.exe closes/crashes 时,它会告诉您缺少哪个模块。你只有一毫秒的时间才能看到它,我录制了我的屏幕并放慢了镜头的速度以查看错误消息。也许不合常规,但对我有用!