lookfeiji 发表于 2023-8-7 18:30

PyInstaller打包exe文件告别命令行

本帖最后由 lookfeiji 于 2023-8-8 17:48 编辑

第一次发帖,有点小激动哈
代码注释的比较清楚了,也无需过多描述,刚刚折腾出来的代码,还热乎的
官方文档地址:https://pyinstaller.org/en/stable/usage.html
PyInstaller模块,是将.py源码打包成exe执行程序的模块,百度与官方文档多介绍的是以cmd命令行形式打包的,
在官方文档里关于模块的函数介绍只有这么一句

"""
pyinstaller --onefile --noconsole --hidden-import os --hidden-import time --hidden-import random
--hidden-import PyQt5 --hidden-import pygame --hidden-import tkinter --hidden-import mutagen
--hidden-import configparser MusicPlayer.py


PyInstaller.__main__.run([
   'my_script.py',
   '--onefile',
   '--windowed'
])

'--onedir'# 生成一个文件夹,与--onefile不同,--onefile生成一个单可执行文件
--no-embed-manifest# 生成外部.exe.manifest文件,而不是将清单嵌入EXE中。仅适用于Onedir模式;在单一模式下,无论此选项如何,清单始终是嵌入式的
-r RESOURCE, --resource RESOURCE# 将资源添加或更新为Windows可执行文件。资源是一到四个项目,file [,type [,name [,语言]]。文件可以是数据文件或exe/dll。对于数据文件,至少必须指定类型和名称。语言默认为0或可能被指定为通配符 *以更新给定类型和名称的所有资源。对于EXE/DLL文件,如果省略了类型,名称和语言或指定为通配符 *,则文件中的所有资源将添加/更新到最终可执行文件。此选项可以多次使用
                                  #大概意思应该是为可执行文件继续添加配置文件或者可执行代码吧

"""
import os
import PyInstaller.__main__

# 定义绝对路径
path = r'C:\Users\Administrator\Desktop\Music player'

files = ['MusicPlayer.py', 'music.py']# 多文件编译往这里加,然后再添加到'--add-data内就好了

# 组合Python文件路径MusicPlayer.py为主程序源码文件
py = os.path.join(path, files)
py2 = os.path.join(path, files)

# 组合图标文件路径
ico = os.path.join(path, 'icon.ico')# 为exe程序文件设置图标

# 运行PyInstaller命令,打包源码
PyInstaller.__main__.run([
    py,# 要打包的Python文件
    '--onefile', # 生成单个可执行文件,省事的不在乎文件大小的用这个,不能与--onedir同时存在,只能二选一
    # '--onedir',# 生成可执行文件夹,只封装了指定的源码,将模块包全部给吐在同一文件夹内,不能与'--onefile'同时存在,刚刚试试了一下启动速度也非常快,所以推荐这个
    '--windowed',# 无控制台窗口
    '--ico', ico,# 设置图标文件
    '--distpath', os.path.join(path, 'dist'),# 指定生成dist文件夹的输出目录
    '--workpath', path,# 指定工作目录,缓存目录,可执行文件生成后后可以删除掉
    '--specpath', path,# 指定.spec文件的输出目录,可执行文件生成后可以删除掉
    '--add-data', f'{py2}.;.',
    # "--add-data" 可以多次使用来添加多个文件
    # 如果还有其他文件需要添加,可以像这样继续添加参数
    # '--add-data', f'{py3}.;.',
    # '--add-data', f'{py4}.;.',
    # '--strip',# 剥离二进制文件中的调试信息,减小文件大小,不可用,官方文档上说不推荐使用,liunx系统用来优化用的,虽然也支持windows但是我测试是有问题的
    '--clean'# 清除此次打包缓存,为下次打包做准备,并不会对现有的执行文件产生影响
    '--no-embed-manifest' # 这个据说是不将清单嵌入EXE中的
])

后面还可以加隐性导入模块,基本格式是:
'--hidden-import=os','--hidden-import=sys',其中--hidden-import=也可以多次出现,据gpt说不写入源码支持的模块,程序在没装py环境的系统上无法运行,但是官方文档没有关于这方面的介绍,要是有老铁感兴趣的可以测试一下,另一个关于打包文件过大我也没捣鼓过,所以我也不知道,但是百度可查的方法就是用python3 -m venv myenv创建一个虚拟环境,然后激活切换到myenv环境里,再安装源码与打包所需的模块之后再打包,另一种是在编写源码时不要用from PyQt5 import*这种带*号的导入方式导包
InstPyQt5 import*这种方式aller

hrh123 发表于 2023-8-7 22:28

zzggood 发表于 2023-8-7 21:31
pythond打包最麻烦的是怎么才能让可执行文件文件尽可能小。

要么换其他的打包方式,用Pyinstaller的话建议自己建一个Python虚拟环境,只装必要的库,因为Pyinstaller会把整个环境包括所有库都打包进去.而且数据表明Pyinstaller会大大减慢程序运行速度.
我这边强烈建议使用Nuitka,用了就知道有多神奇了

sai609 发表于 2023-8-7 22:20

借楼发问
一,数据集csv,多变量,含多格式数值,为分析建模,经常需要将导入的转化为特定格式。。。。有啥开源库能快速辨别和实现各变量数值的转变?
二,pycharm跑代码,做数据分析挖掘,N小时后才生成图像,plot.show,应该在哪里and怎么加入代码,才能显示图像生成进度倒计时(不是运算分析,是生成图像)?

orb001 发表于 2023-8-7 21:08

谢谢分享好软件

zzggood 发表于 2023-8-7 21:31

pythond打包最麻烦的是怎么才能让可执行文件文件尽可能小。

hrpzcf 发表于 2023-8-7 21:48

其实有好多GUI工具封装了PyInstaller都可以摆脱命令行操作,我也写了一个工具:https://www.52pojie.cn/thread-1687023-1-1.html

chlryg 发表于 2023-8-7 22:17

zzggood 发表于 2023-8-7 21:31
pythond打包最麻烦的是怎么才能让可执行文件文件尽可能小。

同问   四十来行代码的.py文件,1.6KB,打完exe包7900KB(在pipenv环境下打包的,排除了无用库还是这么大),查个眼,层主解决扣我一下

15953579702 发表于 2023-8-7 22:18

正好最近在学习打包封装,学习一下看看是否是自己想用的

lookfeiji 发表于 2023-8-8 10:19

chlryg 发表于 2023-8-7 22:17
同问   四十来行代码的.py文件,1.6KB,打完exe包7900KB(在pipenv环境下打包的,排除了无用库还是这么大 ...

可以试试将--onefile改成--onedir

lookfeiji 发表于 2023-8-8 10:22

hrpzcf 发表于 2023-8-7 21:48
其实有好多GUI工具封装了PyInstaller都可以摆脱命令行操作,我也写了一个工具:https://www.52pojie.cn/thr ...

我是感觉官方对于PyInstaller模块的文档描述的并不是很清楚,虽然我英语很差,所以感觉可以捣鼓一下
页: [1] 2
查看完整版本: PyInstaller打包exe文件告别命令行