Pyinstaller PyQt5 ModuleNotFoundError 第二个窗口不会打开

问题描述

我正在尝试使用 PyQt5 和第二个 .py 文件打开第二个 GUI - 它在 IDE 中工作,但在编译为单个 .exe 时不起作用。第一个 GUI 打开,第二个没有。我收到 ModuleNotFoundError。

Traceback (most recent call last):
  File "C:\Users\Me\PycharmProjects\ProjectName\dist\firstwindow\secondwindow.py",line 1,in <module>
    import MysqL.connector
ModuleNotFoundError: No module named 'MysqL'

我已经尝试以多种方式修改规范文件,现在我什至想不起来了。据我所知,Pyinstaller 从第一个 .py 文件导入模块没有问题,但是当它尝试在 secondwindow.py 上进行二级导入或隐藏导入时 - 它有问题。

我尝试在规范文件的 pathex、datas 和隐藏导入字段中指向 sql 模块。我在这三个字段中输入了诸如 'C:\\Users\\Me\\PycharmProjects\\ProjectName\\venv\\Lib\\site-packages\\MysqL' 之类的文本,但仍然收到相同的错误

我尝试使用 --hiddenimport=MysqL 如下:pyinstaller --onefile --hiddenimport=MysqL test.spec

在下面的例子中,我导入了MysqL.connector,并在代码中随意使用。这是为了演示我在与 MysqL 相关的实际程序中收到的错误。如果我事先删除 MysqL.connector 或尝试导入 PyQt5,我仍然会遇到与 PyQt5 相关的错误

最小可重复代码

firstwindow.py

import MysqL.connector
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication,QMainWindow,QPushButton
import subprocess
import sys

db = MysqL.connector.connect()

class Firstwindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.button = QPushButton("Push for Window")
        self.button.clicked.connect(self.show_new_window)
        self.setCentralWidget(self.button)

    def show_new_window(self,checked):
        subprocess.Popen("secondwindow.py",shell=True)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = Firstwindow()
    window.show()
    sys.exit(app.exec_())

secondwindow.py

import MysqL.connector
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication,QPushButton
import sys

db = MysqL.connector.connect()


class NewWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.button = QPushButton("Second Window Opened")
        self.setCentralWidget(self.button)




if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = NewWindow()
    window.show()
    sys.exit(app.exec_())

测试规范

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['firstwindow.py','secondwindow.py'],pathex=['C:\\Users\\Me\\PycharmProjects\\ProjectName','C:\\Users\\Me\\PycharmProjects\\ProjectName\\venv\\Lib\\site-packages\\MysqL'],binaries=[],datas=[('firstwindow.py','.'),('secondwindow.py',('C:\\Users\\Me\\PycharmProjects\\ProjectName\\venv\\Lib\\site-packages\\MysqL','.')],hiddenimports=['C:\\Users\\Me\\PycharmProjects\\ProjectName\\venv\\Lib\\site-packages\\MysqL'],hookspath=[],runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False)
pyz = PYZ(a.pure,a.zipped_data,cipher=block_cipher)
exe = EXE(pyz,a.scripts,[],exclude_binaries=True,name='firstwindow',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,console=True )
coll = COLLECT(exe,a.binaries,a.zipfiles,a.datas,upx_exclude=[],name='firstwindow')

后跟:pyinstaller --onefile test.spec

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)