pyinstaller+upx给python GUI程序添加自定义图标

一、在线.ico图标生成

windows用48x48尺寸
https://www.ico51.cn/

二、upx打包图标工具

https://upx.github.io/

三、UI文件生成py代码

pyside2-uic window.ui > window.py

四、打包命令

1、–icon:这个是.ico图标路径
2、–upx-dir:upx打包工具exe文件路径
3、-no-upx:这个参数是不使用upx压缩,其实pyinstaller正确参数应该是–no-upx,但是使用–no-upx会报错且无法打包,用-no-upx虽然参数不存在但是能正确打包,只是main.spec会变成-no-upx.spec,打出来的包名称也会变成-no-upx.exe,但是不影响使用,就没研究了。
4、备注:安全起见,我的路径都是乱写的,你们写自己的就行

#第一次打包使用
pyinstaller -wF --icon="D:\upx424win64\ico\phiz.ico" -no-upx --upx-dir="D:\\upx424win64" --paths "D:\\GitDir\\qt_project" --add-data "png/1.png;png" --add-data "png/2.png;png" --add-data "png/3.png;png" --add-data "keys/20240402_certificate.pem;keys" --add-data "keys/20240402_private_key.pem;keys" --add-data "keys/20240402_public_key.pem;keys" main.py --hidden-import chat_module  --hidden-import window

#使用已有main.spec文件打包(未添加新文件使用)
pyinstaller main.spec

五、生成的main.spec文件

a = Analysis(
    ['main.py'],
    pathex=['D:\\\\work2023\\\\20231116\\\\GitDir\\\\qt_project'],
    binaries=[],
    datas=[('png/1.png', 'png'), ('png/2.png', 'png'), ('png/3.png', 'png'), ('keys/20240402_certificate.pem', 'keys'), ('keys/20240402_private_key.pem', 'keys'), ('keys/20240402_public_key.pem', 'keys')],
    hiddenimports=['chat_module', 'data_aes_encrypt', 'data_md5_sign',  'window'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='o-upx',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['D:\\upx424win64\\ico\\xxx.ico'],
)
<think>我们参考了多个引用,特别是引用[1][2][3][4],它们都涉及将Python程序打包为可执行文件。用户的需求是将Python GUI程序打包成可执行文件。根据引用,我们可以总结出使用PyInstaller是常见且方便的方法,并且特别要注意GUI程序需要隐藏控制台窗口(使用--windowed或-w参数)。 以下是详细步骤: 1. **安装PyInstaller**: ```bash pip install pyinstaller ``` 2. **打包命令**: 对于GUI程序,通常需要隐藏控制台窗口,使用`--windowed`(或`-w`)参数。如果希望打包成单个可执行文件,使用`--onefile`(或`-F`)参数。 ```bash pyinstaller --onefile --windowed your_script.py ``` 其中`your_script.py`是程序的入口文件。 3. **处理资源文件**: 如果程序包含图片、数据文件等资源,需要额外配置。有两种方法: - 在代码中使用相对路径,并确保资源文件在可执行文件同一目录(或子目录)下。然后通过`--add-data`参数将资源文件加入。 ```bash pyinstaller --onefile --windowed --add-data="images:images" your_script.py ``` 其中`images:images`表示将当前目录下的`images`文件夹复制到可执行文件所在目录的`images`文件夹中(在Windows中用分号`;`分隔,Linux/macOS用冒号`:`)。 - 在代码中通过`sys._MEIPASS`访问临时解压目录(PyInstaller打包时会将资源文件解压到此目录)。例如: ```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) # 使用示例 image_path = resource_path('logo.png') ``` 4. **图标设置**: 使用`--icon`参数指定程序图标(必须是.ico格式): ```bash pyinstaller --onefile --windowed --icon=app.ico your_script.py ``` 5. **其他注意事项**: - 如果程序使用了第三方库,确保在打包环境中已安装。 - 打包后生成的可执行文件在`dist`目录下。 - 测试可执行文件:在目标操作系统上运行(注意:Windows打包的exe不能在Linux/macOS上运行,需要各自平台打包)。 6. **多平台打包**: 需要在目标平台上执行打包命令。例如,为Windows打包就在Windows上运行PyInstaller,为macOS打包就在macOS上运行。 7. **常见问题**: - 如果打包后运行报错,可以去掉`--windowed`参数,这样运行时会出现控制台窗口,可以查看错误信息。 - 使用`--debug`参数可以生成调试版本。 根据引用[4],特别要注意:如果程序中有打印语句(如print),则不要使用`-w`(或`--windowed`)参数,否则可能会报错。但如果是GUI程序,通常没有控制台输出,所以应该使用`-w`来隐藏控制台。 示例(打包Tkinter程序): 假设我们有一个Tkinter程序`main.py`,并且程序使用了一个`images`文件夹存放图片,图标为`app.ico`。 打包命令: ```bash pyinstaller --onefile --windowed --icon=app.ico --add-data="images;images" main.py ``` 在Linux或macOS上,将分号改为冒号: ```bash pyinstaller --onefile --windowed --icon=app.ico --add-data="images:images" main.py ``` 执行后,在`dist`目录下会生成可执行文件(Windows为`main.exe`,macOS为`main`,Linux为`main`)。 引用[1]提到打包为不同平台的可执行文件,引用[2]介绍了环境准备和打包工具,引用[3]和[4]则提供了PyInstaller的具体参数使用。 因此,我们按照上述步骤即可完成GUI程序的打包。 [^1]: 如何将Python应用程序打包为可执行文件 [^2]: Python 程序打包为可执行应用程序:从单文件到工程项目 [^3]: 将Python应用程序打包为可执行文件 [^4]: 【将python程序打包成可执行exe文件】将python GUI编写的点名系统打包成exe</think>### 如何将Python GUI程序打包为可执行文件 以下是使用PyInstaller打包Python GUI程序的详细步骤,适用于Windows、macOS和Linux平台: #### 1. 安装打包工具 ```bash pip install pyinstaller ``` #### 2. 基本打包命令(通用格式) ```bash pyinstaller --onefile --windowed your_script.py ``` - `--onefile`:生成单个可执行文件 - `--windowed`:隐藏控制台窗口(GUI程序必备)[^4] - `your_script.py`:你的主程序文件 #### 3. 添加程序图标 ```bash pyinstaller --onefile --windowed --icon=app.ico your_script.py ``` - 图标文件需为`.ico`格式(Windows)或`.icns`(macOS) #### 4. 处理资源文件(如图片、配置文件) ```bash pyinstaller --onefile --windowed --add-data "images/*;images" your_script.py ``` - `--add-data "源路径;目标路径"`:将资源文件打包进应用 - 在代码中使用以下路径访问资源: ```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) # 使用示例 image_path = resource_path("images/logo.png") ``` #### 5. 平台特定注意事项 | 平台 | 特殊要求 | 输出文件扩展名 | |---------|-----------------------------------|----------------| | Windows | 需要`.ico`图标文件 | `.exe` | | macOS | 需要`.icns`图标文件 | 无扩展名 | | Linux | 可能需要安装`libxcb`依赖 | 无扩展名 | #### 6. 完整打包示例(Tkinter程序) ```bash pyinstaller --onefile --windowed --name "MyApp" --icon=app.ico --add-data "assets/*;assets" main.py ``` 生成的可执行文件位于`dist/`目录 #### 7. 解决常见问题 1. **缺失依赖**: ```bash # 查看依赖树 pip freeze > requirements.txt # 确保所有依赖已安装 pip install -r requirements.txt ``` 2. **防病毒软件误报**: - 使用代码签名证书签名可执行文件 - 添加软件到杀毒软件白名单 3. **文件体积过大**: ```bash # 使用UPX压缩 pip install upx pyinstaller --onefile --windowed --upx-dir=/path/to/upx your_script.py ``` #### 8. 测试与分发 1. 在**无Python环境**的目标机器测试 2. 使用Inno Setup(Windows)或CreateDMG(macOS)制作安装包 3. 推荐分发方式: - Windows:`.exe`安装包 - macOS:`.dmg`磁盘映像 - Linux:`.AppImage`或`.deb`/`.rpm`包 > **最佳实践**:始终在虚拟机或干净系统中测试打包结果[^1][^2] [^1]: 如何将Python应用程序打包为可执行文件 [^2]: Python 程序打包为可执行应用程序:从单文件到工程项目 [^3]: 将Python应用程序打包为可执行文件 [^4]: 【将python程序打包成可执行exe文件】将python GUI编写的点名系统打包成exe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值