大家好!我是风哥,一个爱折腾的Python工程师。今天来给大家讲讲怎么把Python代码打包成exe文件。写完代码分享给朋友,总不能让他们先装个Python吧?PyInstaller就是来解决这个问题的!
基础打包操作
安装超级简单,一行命令搞定:
1pip install pyinstaller
来个最基础的打包命令:
1pyinstaller -F your_script.py
写个小程序试试:
1# hello.py
2print("你好啊,这是我的第一个exe程序!")
3input("按回车键退出...")
温馨提示:🌟 打包时记得在代码所在的目录下执行命令,不然容易找不到文件
常用参数解析
1# 打包成单个exe文件
2pyinstaller -F hello.py
3
4# 指定程序图标
5pyinstaller -F -i icon.ico hello.py
6
7# 不显示控制台窗口(GUI程序常用)
8pyinstaller -F -w hello.py
9
10# 指定输出目录
11pyinstaller -F --distpath=./output hello.py
高级玩法
想把依赖文件一起打包?用 --add-data:
1# Windows系统用分号
2pyinstaller -F --add-data="config.json;." hello.py
3
4# Linux/Mac用冒号
5pyinstaller -F --add-data="config.json:." hello.py
在代码中这样获取资源文件路径:
1import sys
2import os
3
4def resource_path(relative_path):
5 if getattr(sys, 'frozen', False):
6 base_path = sys._MEIPASS
7 else:
8 base_path = os.path.abspath(".")
9 return os.path.join(base_path, relative_path)
10
11# 使用方法
12config_path = resource_path("config.json")
打包配置文件
要是参数多了,可以写个spec文件:
1# hello.spec
2block_cipher = None
3
4a = Analysis(['hello.py'],
5 pathex=[],
6 binaries=[],
7 datas=[('config.json', '.')],
8 hiddenimports=[],
9 hookspath=[],
10 runtime_hooks=[],
11 excludes=[],
12 win_no_prefer_redirects=False,
13 win_private_assemblies=False,
14 cipher=block_cipher,
15 noarchive=False)
16
17pyz = PYZ(a.pure, a.zipped_data,
18 cipher=block_cipher)
19
20exe = EXE(pyz,
21 a.scripts,
22 a.binaries,
23 a.zipfiles,
24 a.datas,
25 [],
26 name='hello',
27 debug=False,
28 bootloader_ignore_signals=False,
29 strip=False,
30 upx=True,
31 upx_exclude=[],
32 runtime_tmpdir=None,
33 console=True,
34 icon='icon.ico')
用spec文件打包:
1pyinstaller hello.spec
温馨提示:🌟 打包完的exe文件体积有点大?试试这个:
1pyinstaller -F --noupx hello.py
疑难杂症处理
有时候程序能运行但打包后闪退,试试这些招:
加 --debug 参数看报错信息:
1pyinstaller -F --debug=all hello.py
找不到隐藏依赖?手动指定:
1pyinstaller -F --hidden-import=pkg_name hello.py
动态导入模块的,记得在spec文件里加上:
1hiddenimports=['你的模块名']
有个特别坑的地方,用到第三方exe文件时得这么写:
1import sys
2import os
3
4if getattr(sys, 'frozen', False):
5 # 打包后的路径
6 ffmpeg_path = os.path.join(sys._MEIPASS, 'ffmpeg.exe')
7else:
8 # 开发环境路径
9 ffmpeg_path = 'ffmpeg.exe'
今天的Python干货分享就到这啦!这些都是我实际项目中总结的经验。动手试试,遇到问题随时在评论区问我。别忘了点赞,下次给大家带来更多Python开发技巧!