将自己的python程序打包成.exe/.app(秀同学一脸呐)

本文详细介绍如何使用PyInstaller和py2app将Python程序分别在Windows和macOS系统下打包成exe和app文件,以便于在未安装Python环境的计算机上运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows 10 x64

macOS Sierra 10.12.4

Python 2.7


准备好装哔~了么,来吧,做个真正意义上的绿色小软件

这里写图片描述


Win下发布应用

起因

今天实验室同学看到我的乞丐版二输入规则器,他挺感兴趣的,也想要玩玩,但是他没有装python的环境,总不能让他一直玩我电脑吧,所以想到了将程序打包成exe,直接运行!想法一出来,根本挡不住啊,说干就干,先百度python打包exe,一大堆答案,我整理了一下,大概有Py2exe和pyinstaller两种,但是,我给你看张图

这是多久前的产品。。。。。。
这是多久前的产品啊,我屮艸芔茻,如果你执意要用这个请移步,然后自己去玩把,反正我下了之后,根本跑不起来,,,,不信的你可以试试咯py2exe官方下载

安装pyinstaller

安装方法

方法一:使用pip install pyinstaller,也可以参考: python如何安装第三方包

方法二:如果是下载github上的包之后手动安装,那么步骤是

  1. 打开cmd,切到pyinstaller解压包目录,我直接放在c盘目录下了,所以我的操作是

cd C:\pyinstaller-develop

  1. 安装pyinstaller,我的操作是

进目录后输入python setup.py install

包下载

亲测可用:Pyinstaller下载地址,GitHub版本,亲测可用

备用地址不:Pyinstaller官网下载地址,我没试过,应该也行

程序打包

先将需要打包的程序,我用自己的Tkint.py文件(自己python文件名字自己修改),把它复制到步骤1的目录下,也就是上面的C:\pyinstaller-develop然后使用命令:pyinstaller -F Tkint.py(建议使用)

注意:如果运行的是gui类型程序,你不需要弹出命令窗口,你可以采用:pyinstaller -F -w文件名.py
之后你的命令窗就会跑半分钟左右,跑完之后是这样的;
这里写图片描述

打包好的Tkint.exe已经在该目录下的dist文件夹中了。如果成功,应该多了这两个文件夹

这里写图片描述

dist里面是这样的
这里写图片描述
然后你就可以拿去给别的机器测试你的程序啦,哈哈哈哈哈

注意: 在同学win8/win10,64位机器上可以运行,win7 x64和其余所有32位亲测失败,会提示不兼容,所以说,如果要32/64通吃,就要在python 32位环境下(不是win32位)编译打包exe,才能在32/64成功。

BTW

但是,如果你使用pyinstaller -F -w文件名.py在别的电脑运行你的exe文件时候你看不到命令窗口,你会认为程序没有运行,打包后的exe比较大,以我的Tkint.py来说,160行的程序,打包后61MB,额,我直接插在U盘上在别的电脑运行,大概需要半分钟左右才能跑起来,所以请慢慢等待。。。。如果你还要改图标,创建目录啥的,请使用pyinstaller -h来查看参数

这里写图片描述

如果觉得内容不够细致,可以参考

用PyInstaller将python转成可执行文件exe笔记 或者用PyInstaller把Python代码打包成单个独立的exe可执行文件

补充

  • 2016.7.7补坑: 基于python的参考文献生成器beta已完成,欢迎下载和使用免费下载基于python的文献生成器.exe

  • 2016.7.8补充: 利用Pyinstaller编译关联文件成exe,只要输入时候写成pyinstaller -F main.py related.py即可,其中main为主函数,其中有import related.py的函数,只要把重要的放前面就好啦,然后最后的exe文件名会以第一个命名,也就是最后形成一个main.exe就是酱紫。修改spec文件,重新加上参数再编译。按照正常步骤做过之后,在目录中还会有一个spec文件,用编辑器打开,之后修改参数,保存后,在原来操作的cmd上写入:pyinstaller main.spec即可,这个是我在gui图像生成exe格式时候,图片无法打包查阅到的,需要单独添加


Mac下发布应用

安装py2app

pip install py2app

或者手动下载安装点这里

打包程序

首先在桌面新建一个文件夹,我这里名字为transapp,然后把要打包的程序放在里面,我这里要打包的是translate.py文件,自己的文件夹和文件名字自己响应替换

  • 进入终端,切路径至该文件夹下
cd ~/Desktop/transapp
  • 开始产生初始化文件
py2applet --make-setup translate.py
  • 保险起见,清除以前产生的build和dist文件夹,第一次操作这两个文件夹是没有的
rm -rf build dist
  • 开始打包应用
python setup.py py2app

这时候会开始执行打包过程,最后大概是这样的

...
Modules not found (conditional imports):
 * _md5 (hashlib)
 * _sha (hashlib)
 * _sha256 (hashlib)
 * _sha512 (hashlib)
 * com (pkg_resources._vendor.appdirs)
 * com.sun.jna (pkg_resources._vendor.appdirs)
 * com.sun.jna.platform (pkg_resources._vendor.appdirs)
 * riscospath (os)
 * win32com (pkg_resources._vendor.appdirs)
 * win32com.shell (pkg_resources._vendor.appdirs)

Done!
  • 找到自己的文件夹,然后里面应该有dist文件夹,打开后里面有个app,双击即可。

测试时候, py2app版本0.14,macos版本10.12.14,测试通过,最后效果图如下所示

这里写图片描述


更新

  • 2016.07.06 更新 win下发布应用
  • 2017.07.26 跟新 mac下发布应用
<think>我们将使用PyInstaller来将Python程序打包Windows可执行文件(.exe)。以下是详细步骤和代码示例。 ### 解决方案 1. **安装PyInstaller**: 在命令行中运行: ``` pip install pyinstaller ``` 2. **基本打包命令**: 对于单个Python文件,使用以下命令: ``` pyinstaller --onefile --windowed your_script.py ``` - `--onefile`:将所有文件打包一个可执行文件。 - `--windowed`:对于图形界面程序,不显示命令行窗口(如果是命令行程序则去掉此选项)。 3. **添加图标(可选)**: 使用`--icon`参数指定图标文件(.ico格式): ``` pyinstaller --onefile --windowed --icon=your_icon.ico your_script.py ``` 4. **添加数据文件(如图片、音频等)**: 使用`--add-data`参数,格式为`源路径;目标路径`(Windows用分号分隔,Linux/macOS用冒号)。 ``` pyinstaller --onefile --windowed --add-data="assets;assets" your_script.py ``` 在代码中,需要使用以下方式处理资源路径: ```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("assets/image.png") ``` 5. **隐藏控制台窗口(仅Windows)**: 如果程序是图形界面,使用`--windowed`。如果是控制台程序,则不需要。 ### 示例:打包桌面宠物程序 假设我们的桌面宠物程序名为`desktop_pet.py`,并且有一个`assets`文件夹存放资源。 打包命令: ``` pyinstaller --onefile --windowed --add-data="assets;assets" --icon=pet_icon.ico desktop_pet.py ``` ### 代码调整(资源路径处理) 在`desktop_pet.py`中,我们需要修改资源加载方式,使用`resource_path`函数: ```python import sys import os def resource_path(relative_path): """ 获取资源的绝对路径。用于PyInstaller打包后的路径定位 """ try: # PyInstaller创建的临时文件夹 base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 加载图片示例 # 原代码:pet_image = pygame.image.load('assets/pet.png') # 改为: pet_image = pygame.image.load(resource_path('assets/pet.png')) ``` ### 打包步骤 1. 将上述代码调整后,确保在开发环境下运行正常。 2. 准备图标文件(如`pet_icon.ico`),放在项目目录下。 3. 打开命令行,进入项目目录。 4. 执行打包命令。 5. 打包后,在`dist`文件夹中找到生的`.exe`文件。 ### 常见问题及解决 - **杀毒软件误报**:PyInstaller打包程序可能被误报为病毒,可以尝试添加数字签名或向杀毒软件提交误报。 - **文件太大**:使用虚拟环境安装仅需要的包,避免打包不必要的库。 - **缺少依赖**:确保所有依赖库都已正确安装,并在打包前测试。 ### 高级选项 - **指定输出目录**:使用`--distpath`指定输出目录。 - **版本信息**:使用`--version-file`指定版本信息文件(Windows下)。 - **UPX压缩**:使用UPX压缩可执行文件(需先下载UPX),添加`--upx-dir`参数。 ### 示例版本信息文件(version.txt) 创建一个文本文件`version.txt`,内容如下: ``` # UTF-8 # VSVersionInfo( ffi=FixedFileInfo( filevers=(1, 0, 0, 0), prodvers=(1, 0, 0, 0), mask=0x3f, flags=0x0, OS=0x40004, fileType=0x1, subtype=0x0, date=(0, 0) ), kids=[ StringFileInfo( [ StringTable( '040904B0', [StringStruct('CompanyName', 'Your Company'), StringStruct('FileDescription', 'Desktop Pet'), StringStruct('FileVersion', '1.0.0.0'), StringStruct('InternalName', 'DesktopPet'), StringStruct('LegalCopyright', 'Copyright &copy; 2023 Your Company.'), StringStruct('OriginalFilename', 'DesktopPet.exe'), StringStruct('ProductName', 'Desktop Pet'), StringStruct('ProductVersion', '1.0.0.0')]) ]), VarFileInfo([VarStruct('Translation', [0, 1200])]) ] ) ``` 打包命令(加入版本信息): ``` pyinstaller --onefile --windowed --add-data="assets;assets" --icon=pet_icon.ico --version-file=version.txt desktop_pet.py ``` ### 总结 使用PyInstaller打包Python程序为Windows可执行文件非常方便,但需要注意资源路径的处理和打包选项的配置。通过上述步骤,可以生一个独立的可执行文件,方便在Windows上分发运行。 §§相关问题§§: 1. 如何为PyInstaller打包程序添加数字签名? 2. 如何减少PyInstaller打包后的文件大小? 3. 如何使用PyInstaller打包多文件项目? 4. PyInstaller打包程序如何实现自动更新?</think># 将Python程序打包Windows可执行文件(.exe)Python程序打包Windows可执行文件是分发Python应用给非技术用户的最佳方式。下面我将详细介绍使用PyInstaller工具打包的完整方案。 ## 完整打包方案 ### 1. 安装PyInstaller ```bash pip install pyinstaller ``` ### 2. 创建简单的Python程序示例 创建一个名为`hello_pet.py`的文件: ```python import tkinter as tk from tkinter import messagebox import os def show_pet(): root = tk.Tk() root.title("桌面宠物") root.geometry("300x200") # 创建标签 label = tk.Label(root, text="🐾 可爱的桌面宠物 🐾", font=("Arial", 16)) label.pack(pady=20) # 创建退出按钮 exit_button = tk.Button(root, text="退出", command=root.destroy, bg="#ff9999") exit_button.pack(pady=10) # 创建信息按钮 info_button = tk.Button(root, text="关于", command=lambda: messagebox.showinfo("关于", "桌面宠物 v1.0\n作者: Python专家")) info_button.pack(pady=5) root.mainloop() if __name__ == "__main__": show_pet() ``` ### 3. 基本打包命令 ```bash pyinstaller --onefile --windowed hello_pet.py ``` ### 4. 完整打包脚本(包含图标和资源) 创建打包脚本`build.spec`: ```python # -*- mode: python ; coding: utf-8 -*- block_cipher = None # 添加资源文件 added_files = [ ('icon.ico', '.'), ('pet_sounds', 'sounds') ] a = Analysis( ['hello_pet.py'], pathex=[], binaries=[], datas=added_files, # 包含资源文件 hiddenimports=[], hookspath=[], hooksconfig={}, 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, a.binaries, a.zipfiles, a.datas, [], name='DesktopPet', # 输出文件名 debug=False, bootloader_ignore_signals=False, strip=False, upx=True, # 使用UPX压缩 console=False, # 不显示控制台窗口 icon='icon.ico', # 设置图标 disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, ) ``` ### 5. 使用spec文件构建 ```bash pyinstaller build.spec ``` ## 打包后的文件处理 ### 1. 添加版本信息 创建`version_info.txt`文件: ``` # UTF-8 # VSVersionInfo( ffi=FixedFileInfo( filevers=(1, 0, 0, 0), prodvers=(1, 0, 0, 0), mask=0x3f, flags=0x0, OS=0x40004, fileType=0x1, subtype=0x0, date=(0, 0) ), kids=[ StringFileInfo( [ StringTable( '040904B0', [StringStruct('CompanyName', 'Your Company'), StringStruct('FileDescription', 'Desktop Pet Application'), StringStruct('FileVersion', '1.0.0.0'), StringStruct('InternalName', 'DesktopPet'), StringStruct('LegalCopyright', 'Copyright &copy; 2023 Your Company'), StringStruct('OriginalFilename', 'DesktopPet.exe'), StringStruct('ProductName', 'Desktop Pet'), StringStruct('ProductVersion', '1.0.0.0')]) ]), VarFileInfo([VarStruct('Translation', [0, 1200])]) ] ) ``` 然后在spec文件中添加: ```python exe = EXE( # ... 其他参数 ... version='version_info.txt', # 添加版本信息 ) ``` ### 2. 处理资源路径 在Python代码中正确处理资源路径: ```python import sys import os def resource_path(relative_path): """获取资源的绝对路径""" try: # PyInstaller创建的临时文件夹 base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 使用示例 icon_path = resource_path('icon.ico') sound_path = resource_path('sounds/pet_sound.wav') ``` ## 高级打包技巧 ### 1. 创建安装程序 使用Inno Setup创建安装程序: 1. 下载Inno Setup: https://jrsoftware.org/isdl.php 2. 创建安装脚本`setup.iss`: ```iss [Setup] AppName=Desktop Pet AppVersion=1.0 DefaultDirName={pf}\DesktopPet DefaultGroupName=Desktop Pet UninstallDisplayIcon={app}\DesktopPet.exe Compression=lzma2 SolidCompression=yes OutputDir=.\dist OutputBaseFilename=DesktopPet_Setup [Files] Source: "dist\DesktopPet.exe"; DestDir: "{app}" Source: "sounds\*"; DestDir: "{app}\sounds" [Icons] Name: "{group}\Desktop Pet"; Filename: "{app}\DesktopPet.exe" Name: "{commondesktop}\Desktop Pet"; Filename: "{app}\DesktopPet.exe" [Run] Filename: "{app}\DesktopPet.exe"; Description: "运行桌面宠物"; Flags: postinstall nowait ``` ### 2. 使用UPX压缩 1. 下载UPX: https://upx.github.io/ 2. 解压并将upx.exe放在项目目录 3. 在spec文件中添加: ```python exe = EXE( # ... 其他参数 ... upx=True, # 启用UPX压缩 upx_exclude=[], # 排除某些文件 ) ``` ## 打包最佳实践 1. **使用虚拟环境**: ```bash python -m venv venv venv\Scripts\activate pip install pyinstaller pip install -r requirements.txt ``` 2. **减小可执行文件大小**: - 使用UPX压缩 - 排除不必要的库 - 使用`--exclude-module`参数 3. **测试打包结果**: - 在干净的Windows虚拟机中测试 - 检查所有资源路径是否正确 - 验证所有功能正常工作 ## 常见问题解决 1. **缺少DLL文件**: - 使用`--add-binary`参数添加DLL - 将DLL放在与exe相同的目录 2. **防病毒软件误报**: - 使用代码签名证书签名 - 向防病毒厂商提交误报 3. **控制台窗口闪烁**: - 确保使用`--windowed`参数 - 检查代码中是否有print语句 ## 完整工作流程 1. 开发Python应用 2. 创建spec文件配置打包选项 3. 使用PyInstaller打包 4. 使用UPX压缩可执行文件 5. 添加版本信息 6. 使用Inno Setup创建安装程序 7. 在干净环境中测试安装包 ## 代码签名(可选但推荐) ```bash # 使用signtool签名 signtool sign /f mycert.pfx /p password /t http://timestamp.digicert.com dist\DesktopPet.exe ``` ## 总结 使用PyInstaller打包Python程序为Windows可执行文件是一个多步骤的过程,但通过合理的配置和优化,可以创建专业级的应用程序分发包。关键点包括:使用spec文件进行详细配置、正确处理资源路径、添加版本信息、使用UPX压缩,以及创建安装程序
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值