首页 > 解决方案 > 在 cx_freeze 中排除 PyQT5,使库更小,exe 启动更快

问题描述

如何使 EXE 库体积更小,exe 启动更快?我的库实际上是 580 MB,exe 的启动时间大约是 10 秒!这是我的 main.py。它从接口导入数据。(子程序)

import sys
from datetime import datetime
from typing import Tuple
import numpy as np
import pandas as pd
from PyQt5.Qt import Qt
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtWidgets import QApplication, QLabel
from PyQt5.QtWidgets import (QWidget, QTableWidget, QTableWidgetItem)
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtGui import QImage
from PyQt5.QtGui import QPixmap
from PyQt5.QtGui import QKeySequence
from PyQt5.QtGui import QMovie
from PyQt5.QtGui import QPainter
from PyQt5.QtGui import QPen
from PyQt5.QtGui import QColor
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QTimer
from PyQt5.QtCore import Qt, QPoint
import cv2
import os
from sys import path
import shutil
import xlsxwriter
from tkinter import Tk, PhotoImage, Canvas
from interface import *
from line_detection import *
import openpyxl 
from openpyxl.styles import Alignment, Font
import os.path

interface.py 的头文件如下所示:

from PyQt5 import QtCore, QtGui, QtWidgets 
import sys
import os.path
import pandas as pd
import numpy as np
from datetime import datetime
import xlsxwriter
import openpyxl 
from openpyxl.styles import Alignment, Font
from openpyxl import load_workbook

在 Inteface.py 我做这样的事情:

MyApp = QtWidgets.QApplication(sys.argv)
V = MyApp.desktop().screenGeometry()
h = V.height()
w = V.width()

class Ui_Form(object):
        def __init__(self):
                self.show_label = True
                self.show_groupbox = False

        def setupUi(self, MainWindow):
                MainWindow.setObjectName("MainWindow")
                
                MainWindow.resize(w, h)
                self.centralwidget = QtWidgets.QWidget(MainWindow)               

                self.centralwidget.setObjectName("centralwidget")
                self.image_label1 = QtWidgets.QLabel(self.centralwidget)
                self.image_label1.setGeometry(QtCore.QRect(0, 0, w, h))
                self.image_label1.setText("")
                self.image_label1.setObjectName("image_label1")        
                self.image_label1.setHidden(self.show_label)               
                self.image_label1.setDisabled(self.show_groupbox)

我的 cx_freeze (setup.py) 看起来像这样。它仍然包括所有包等。制作 EXE 时如何使 PyQT5 和其他包更小

import sys
from cx_Freeze import setup, Executable

try:
    from cx_Freeze.hooks import get_qt_plugins_paths
except ImportError:
    include_files = []
else:
    # Inclusion of extra plugins (new in cx_Freeze 6.8b2)
    # cx_Freeze imports automatically the following plugins depending of the
    # use of some modules:
    # imageformats - QtGui
    # platforms - QtGui
    # mediaservice - QtMultimedia
    # printsupport - QtPrintSupport
    #
    # So, "platforms" is used here for demonstration purposes.
    include_files = get_qt_plugins_paths("PyQt5", "platforms")

# base="Win32GUI" should be used only for Windows GUI app
base = None
if sys.platform == "win32":
    base = "Win32GUI"

build_exe_options = {
    #[""]
    "excludes": ["PyQt5.QtBluetooth",
                 "PyQt5.QtNetwork",
                 "PyQt5.QtNfc",
                 "PyQt5.QtWebChannel",
                 "PyQt5.QtWebEngine",
                 "PyQt5.QtWebEngineCore",
                 "PyQt5.QtWebEngineWidgets",
                 "PyQt5.QtWebKit",
                 "PyQt5.QtWebKitWidgets",
                 "PyQt5.QtWebsockets",
                 "PyQt5.QtSql",
                 "PyQt5.QtScript"],

    "include_files": include_files,
}

bdist_mac_options = {
    "bundle_name": "TEST",
}

bdist_dmg_options = {
    "volume_label": "TEST",
}

executables = [Executable("main.py", base=base, target_name="TEST")]

setup(
    name="TEST",
    version="2.4",
    description="TEST",
    options={
        "build_exe": build_exe_options,
        "bdist_mac": bdist_mac_options,
        "bdist_dmg": bdist_dmg_options,
    },
    executables=executables,
)

标签: pythonpyqt5cx-freeze

解决方案


推荐阅读