pyqt生成.py文件和资源打包

0、前提。需要用到pyuic5pyrcc5两个包

1、.ui文件生成.py文件

需要用到pyuic5pyrcc5两个包。
在.ui文件的路径下用cmd执行以下命令

pyuic5 -o XXX.py XXX.ui

XXX.py是目标文件,XXX.ui是qt designer生成的文件。
注意,顺序不可写反,否则XXX.ui会被覆盖,设计工作重来
注意,顺序不可写反,否则XXX.ui会被覆盖,设计工作重来
注意,顺序不可写反,否则XXX.ui会被覆盖,设计工作重来

1.1、使用.py界面文件

生成的.py文件两种方法调用
1、直接在.py文件中添加主程序标识,创建实例,如下例,我的UI文件名为ui_mianwindow.ui,生成的ui_mainwindow.py:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui_mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

#从此开始,为pyuic5自动生成的代码,不建议修改
from PyQt5 import QtCore, QtGui, QtWidgets
#主程序
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    ……
#自动添加的资源打包文件
import main_window_rc
#至此结束
    
#添加以下创建实例
if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

2、在其他程序中调用改界面文件(建议)
如创建一个主程序文件:

from UI.ui_mainwindow import Ui_MainWindow

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

2、资源文件打包

在Qt Designer 中设计界面时是不能直接加入图片和图标等资源的,而是需要在PyQt开发目录下编写.qrc文件,可以用文本编辑器打开。
在.qrc文件的路径下用cmd执行以下命令

pyrcc5 XXX.qrc -o XXX_rc.py

XXX_rc.py名字要加后缀)是目标文件,XXX.qrc是在qt designer生成的资源列表文件。

2.1、使用.py资源文件

这个文件的使用方法也是导入,但是这个导入工作在生成.py界面时自动生成了(看上面代码块),我们要做的只是把他放在相应目录下

注意1、一般情况,.qrc文件在.ui文件同一个路径,生成后,建议复制一份到调用.py界面文件的主程序目录下。

注意2、更新资源后,要重新生成资源文件。原因是Qt Designer设计时放入的图片都是路径,但打包后是将资源数字化。

注意3、在引用.py界面文件的主程序中可以通过程序绑定资源,这样绑定的资源更新后不需要生成资源文件,对于经常更新的图片等资源来说更方便

本篇随手记,有空再更新

<think>嗯,用户想将Python脚本打包成exe文件,使用PyInstaller或cx_Freeze。我需要根据提供的引用资料之前的知识来整理步骤。首先,用户可能需要详细的安装使用方法。引用1提到了PyInstaller、cx_Freezepy2exe,但用户只问了前两个。引用3有cx_Freeze的示例代码,可能需要解释如何配置setup.py。另外,引用2提到__init__.py的问题,可能需要注意模块导入的问题。 首先,PyInstaller比较简单,适合新手。步骤应该是安装,然后使用命令行打包。可能需要提到常用参数,比如单文件、窗口模式。然后,cx_Freeze需要写setup脚本,用户可能需要分步说明如何创建setup.py,并运行命令。还要注意依赖处理常见问题,比如递归深度报错,引用3中的sys.setrecursionlimit(3000)可能相关,需要提醒用户。 另外,常见问题部分应该包括依赖缺失、防病毒误报、路径问题,以及动态导入的问题。引用2提到的模块组织可能动态导入有关,需要建议用--hidden-import或includes处理。 还要比较PyInstallercx_Freeze的优缺点,方便用户选择。比如PyInstaller简单,但打包文件大;cx_Freeze更灵活但配置复杂。相关问题可能涉及性能分析、优化方法,但用户的问题主要是如何打包,所以相关问题可能包括其他工具对比,解决打包错误,或减小体积的方法。 需要确保步骤清晰,代码示例正确。比如PyInstaller的命令行,cx_Freeze的setup.py内容。同时检查是否需要处理第三方库,比如PyQt或numpy,可能需要额外参数。引用3中的options配置,比如includespackages,可以提醒用户根据项目调整。 最后,确保回答使用中文,数学公式用$...$,如果有的话。不过这里可能用不到数学公式。要避免使用Markdown,但用户给的示例里有代码块,所以需要保留。同时添加引用标识,比如引用1、2、3中的内容,但根据问题可能主要引用13。需要注意用户给的引用可能问题相关度,比如引用2提到打包报错,可能涉及模块导入问题,需要提到。</think>以下是使用PyInstallercx_Freeze将Python脚本打包成EXE文件的详细指南,包含技术要点常见问题解决方案: ### 一、PyInstaller方案(推荐新手) 1. **安装命令** ```bash pip install pyinstaller ``` 2. **基础打包生成文件exe)** ```bash pyinstaller -F -w your_script.py ``` - `-F`:生成单个可执行文件 - `-w`:禁用控制台窗口(GUI程序专用) - 输出路径:`dist`文件夹内 3. **处理复杂依赖示例** ```bash pyinstaller --hidden-import=pandas --add-data "config.ini;." your_script.py ``` ### 二、cx_Freeze方案(适合复杂项目) 1. **安装与基础配置** ```bash pip install cx-Freeze ``` 创建`setup.py`配置文件: ```python from cx_Freeze import setup, Executable import sys # 解决递归深度限制(常见打包错误) if sys.platform == "win32": base = "Win32GUI" else: base = None executables = [Executable("your_script.py", base=base)] setup( name="AppName", version="1.0", description="App Description", executables=executables, options={ "build_exe": { "packages": ["numpy", "pyqt5"], # 显式声明依赖包 "include_files": ["data/", "config.ini"], # 包含资源文件 "excludes": ["tkinter"] # 排除无用模块 } } ) ``` 2. **执行打包命令** ```bash python setup.py build ``` ### 三、打包工具对比 | 特性 | PyInstaller | cx_Freeze | |--------------------|-------------------|-------------------| | 配置复杂度 | 简单(命令行) | 中等(需配置文件)| | 单文件打包 | ✔️ | ❌ | | 跨平台支持 | ✔️ | ✔️ | | 二进制体积 | 较大 | 较小 | | 第三方库兼容性 | 优秀 | 需手动配置[^3] | ### 四、常见问题解决方案 1. **依赖缺失问题** - 现象:运行时提示`No module named xxx` - 解决:通过`--hidden-import`参数显式声明(PyInstaller)或在配置中添加`packages`列表(cx_Freeze)[^3] 2. **防病毒软件误报** - 建议:添加数字签名或使用`--key`参数加密字节码(PyInstaller) 3. **路径引用错误** - 正确写法:使用`sys._MEIPASS`访问打包资源 ```python import sys import os def resource_path(relative_path): if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath("."), relative_path) ``` 4. **动态导入问题** - 场景:使用`__import__()`或`importlib`动态加载模块 - 处理:在打包参数中预声明可能动态加载的模块[^2] ### 五、高级优化技巧 1. **减小体积方法** - 使用UPX压缩: ```bash pyinstaller --upx-dir=/path/to/upx your_script.py ``` - 排除无用库: ```python # cx_Freeze配置示例 "excludes": ["scipy", "matplotlib"] ``` 2. **多平台打包建议** - Windows:注意处理`pywin32`依赖 - Linux:需在目标系统执行打包 - macOS:使用`py2app`更佳
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值