PyInstaller —— 一个Python中非常有用的库,打包神器

文摘   2024-11-08 11:10   上海  

大家好!我是风哥,一个爱折腾的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

疑难杂症处理

有时候程序能运行但打包后闪退,试试这些招:

  1. 加 --debug 参数看报错信息:

1pyinstaller -F --debug=all hello.py
  1. 找不到隐藏依赖?手动指定:

1pyinstaller -F --hidden-import=pkg_name hello.py
  1. 动态导入模块的,记得在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开发技巧!

py学习基地ai
分享生活百态,情感故事,了解不一样的人生
 最新文章