python - python .exe 无法正常工作
问题描述
我下载了 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:
我在调用 button1 的主窗口 (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()
我在调用button2的主窗口(homepage.py)中使用的代码,
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 文件中。
PS:有些录制程序太慢,无法录制出现和消失的窗口,所以我尝试使用我的智能手机(iPhone)相机,它能够检测到它。
解决方案
我有一个非常相似的问题,问题是缺少模块。您的 exe 可能使用 pyinstaller 未检测到的其他模块。对我来说,只要我导入了 Decimal 模块,我的 exe 就会像魅力一样工作!当您的 homepage.exe 关闭/崩溃时,它会告诉您缺少哪个模块。您将只有一毫秒的时间来查看它,我录制了我的屏幕并放慢了镜头以查看错误消息。也许是非常规的,但对我有用!
推荐阅读
- linux - SED 如何用正则表达式替换 Line
- python - 当数据到达python中的串口时触发的功能
- css - 在 Bootstrap 4.5 中创建自己的主题
- intellij-idea - IntelliJ 的 ObjectAid UML
- django - Django TextField 不强制执行空白=假
- css - 如何跨对象的多个字段继承样式?
- reactjs - React PDFDownloadLink - 通过代码显式调用 onclick 事件
- python - Python检查元素中键的值并返回列表中的元素
- neo4j - 在(尚未)现有节点之间创建关系
- python - Minmaxscaler inverse_transform 不起作用