找回密码
 会员注册
查看: 20|回复: 0

python之pyinstaller模块,python程序打包成一个可执行exe文件(超详细)!

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71625
发表于 2024-9-6 15:34:15 | 显示全部楼层 |阅读模式
在开发Python应用程序时,将代码打包成可执行文件(.exe)是一个常见的需求。主要是方便接收者的使用,在没有python环境下也能正常打开的可执行文件。Pylnstaller是一个在Windows、GNU/Linux、macos等平台下将Python程序冻结(打包)为独立可执行文件的工具,用于在未安装Python的平台上执行Python编写的应用程序相比类似工具,它的主要优点是Pylnstaller与Python3.7-3.10一起工作,由于透明压缩,它构建了更小的可执行文件,它是完全多平台的,并使用操作系统支持加载动态库,从而确保完全兼容PyInstaller会分析Python程序,并将程序打包成一个完整的可执行文件,包括所有依赖项。此外,Pylnstaller可以自动检测Python依赖库,并将其打包到可执行文件中Pylnstaller的原理是将Python程序转换为C语言代码,并将C语言代码编译成可执行文件。具体来说,Pylnstaller会将Python程序分析为一个抽象语法树(AST),然后将AST转换为C语言代码。1.更新pip指定版本、指定镜像源python.exe-mpipinstall--upgradepip==24.2-ihttps://pypi.tuna.tsinghua.edu.cn/simplepython.exe-mpipinstall--upgradepip==24.2-ihttps://pypi.tuna.tsinghua.edu.cn/simple国内镜像源:备注:pipinstall时出现WARNING:Ignoringinvaliddistribution2.windows安装Pylnstaller库在开始之前,我们需要安装打包的工具,我们将使用“pyinstaller”来打包Python文件成可执行文win+r,输入cmd 进入命令行终端#安装命令pipinstallpyinstaller#安装太慢的话,可切换源pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplepyinstaller#从清华源安装等待安装完成即可!2.1.pyinstaller执行文件位置D:\ProgramFiles\pyhton3.11.4\Scripts2.2环境变量配置path里添加script路径\2.3测试能否使用3.pyinstaller常用打包参数pyinstaller--help#查看支持哪些参数常用的参数:有的看可能看到用的是非错写版参数,也是正常的。4.打包命令 windows和linux使用的命令都是一样的,这里为了方便平时使用,直接复制粘贴使用,就分开写了。windows系统打包命令:#如果你的Python程序是一个GUI应用程序,可以使用如下命令将其打包为GUI应用程序:#其中,--windowed参数表示生成无控制台窗口应用程序,--icon参数表示定义程序图标。#-F生成单个可执行文件,-w不显示doc小黑框Pyinstaller-F-w你的脚本.py-i你的图标.ico(pyinstaller首字母大小写都可以)linux系统打包命令:pyinstaller你的脚本.py#默认情况下,PyInstaller生成的可执行文件包含多个文件。#如果需要将所有文件打包成一个单独的可执行文件,可以使用如下命令:#--onefile和-F是一样的pyinstaller--onefile你的脚本.pypyinstaller-F你的脚本.py#如果你的Python程序是一个控制台应用程序,可以使用如下命令将其打包为控制台应用程序pyinstaller--console你的脚本.py#-c--console设置环境变量 如果你的Python程序需要使用环境变量,可以通过设置PyInstaller的环境变量来实现。例如,如果你的Python程序需要使用MY_VAR环境变量,可以使用如下命令:  pyinstaller--envMY_VAR=valueyourscript.py  准备python文件在打包之前,确保你的python文件可以独立运行,并不依赖于动态加载的模块或其他外部源。如果你的文件有依赖项,确保他们已经正确的安装并能够在打包后被访问。打包python文件打开命令终端,并控制前往到你包含python文件(key_logger.py)的目录(也可以打开文件所在地,cmd)单个python程序的转换Pyinstaller-F-wxxxx.py切换到要转换的python文件路径,输入上述指令。(1)-F:只生成一个单个文件(只有一个exe文件)(2)-w:就是exe运行的时候不弹出那个命令行(黑窗口)(3)xxx.py:就是需要转换的python文件接收到以下信息,即代表成功执行打包命令回车运行 1.这将使用pyinstaller库将python文件打包成一个独立的可执行文件。 2.打包过程需要些时间,等待完成。打包完成,会在当前目录看到一个dist的文件夹3.如果需要转换的python程序用到的外部库太多,程序比较大的情况下,可能会出现如下错误信息:解决方法如下:在执行完成后虽然报错,但是与xxx.py文件同级目录下会生成一个xxx.spec文件,打开这个文件,xxx.py第一行是字符编码,在代码的第二三行加入下面两句代码。然后执行下面代码(千万不要再去执行原来的打包命令)pyinstaller-F-wxxxx.py完成后双击运行该文件就可以啦。运行可执行文件进入dist文件夹,找到生成的可执行文件,名字为key_logger.exe将可执行文件复制到你想要运行它的计算机上。双击可执行文件,你的python程序将开始执行。注意事项:设置环境变量 如果你的Python程序需要使用环境变量,可以通过设置PyInstaller的环境变量来实现。例如,如果你的Python程序需要使用MY_VAR环境变量,可以使用如下命令:  pyinstaller--envMY_VAR=valueyourscript.py 关于依赖项和资源(第三方库或者模块,使用到的图片,配置文件)依赖项管理:如果你的Python程序依赖于外部库或模块,你需要确保这些依赖项在打包后可以正确访问。可以通过在打包命令中使用--hidden-import参数来指定需要包含的额外模块。数据文件和资源:如果你的程序需要访问数据文件或其他资源文件,例如配置文件、图像等,确保这些文件与可执行文件一起打包。你可以使用--add-data参数来指定包含这些文件,如:pyinstaller--onefile--add-data"data_files;data_files"your_script.py打包多个文件如果你的应用程序由多个Python文件组成,你可以通过将所有文件作为参数传递给pyinstaller命令来打包它们pyinstaller--onefilefile1.pyfile2.py这将打包所有指定的文件,并生成一个单独的可执行文件实际打包会出现各种问题! 成功打包成可执行文件的时候。一打开这个文件,发现成了“不可执行文件”,路径错误问题,第三方库没有打包过去,环境也没有一起打包过去......那怎么办啊,语法又记不住,那就用spec文件。spec文件spec文件是PyInstaller工具生成的一个配置文件,用于定义和配置打包过程中的各种选项和参数。它是一个纯文本文件,通常与要打包的Python脚本文件位于同一目录中,并以.spec作为文件扩展名。spec文件包含了一些重要的信息,例如要打包的脚本文件、依赖项、数据文件、资源文件等。通过编辑spec文件,你可以自定义打包过程的行为和结果,以满足特定的需求。创建spec文件使用PyInstaller进行打包时,可以通过两种方式生成spec文件:1.自动创建在命令行终端中执行以下命令,PyInstaller将自动为指定的Python脚本文件生成一个默认的spec文件:pyinstalleryour_script.py2.手动创建也可以手动创建一个spec文件,并在其中指定需要打包的文件、依赖项和其他选项。创建一个新的文本文件,并使用以下基本结构#your_script.spec#导入所需的模块importsysfromPyInstaller.utilsimportcollect_data_files#定义spec文件配置block_cipher=Nonea=Analysis(['your_script.py'],#替换成你要打包的Python脚本文件pathex=[],binaries=[],datas=collect_data_files('your_package'),#替换成你要包含的数据文件路径hiddenimports=[],hookspath=[],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='your_script',#替换成你的可执行文件名debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=True)修改spec文件内容 使用文本编辑器打开.spec文件(your_script_name.spec),并根据需要进行修改。你可以自定义输出文件的名称、要包含的附加文件等选项。1.添加第三方库:在.spec文件中,使用--add-data选项添加第三方库的文件。如果第三方库包含非二进制文件(例如Python脚本、配置文件),可以使用--add-data选项来指定库文件相对于脚本文件的路径 datas=[('path/to/library/files/*','library/files')]如果第三方库包含二进制文件(例如DLL文件、共享库),可以使用--add-binary选项来包含这些文件。指定库文件相对于脚本文件的路径。binaries=[('path/to/library/binary','.')]2. 添加图片路径:在.spec文件中,可以使用--add-data选项添加图片路径,以确保图片文件被正确地打包进可执行文件。datas=[('path/to/image/file.jpg','.')]将path/to/image/file.jpg替换为实际的图片路径,并根据需要调整目标文件夹。 打包文件编辑好了spec文件,你可以使用以下命令来执行打包过程:pyinstalleryour_script.spec然后就会根据spec文件中的配置来进行打包文件,生成可执行文件 。这是我打包一个按钮小程序时用到的spec文件:#-*-mode:python;coding:utf-8-*-block_cipher=Noneimportsyssys.path.append('d:/python_env/spider2_env/lib/site-packages')importtkinterastkfromtkinterimportmessagebox,ttkfromPILimportImageTk,Imageimportosimportrandoma=Analysis(['anniu.py'],pathex=['D:/exe/py1'],binaries=[],datas=[('D:\\exe\\py1\\imgs\\a.jpg','imgs'),('D:\\exe\\py1\\imgs\\c.jpg','imgs')],hiddenimports=['PIL','tkinter','random','PIL.ImageTk'],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='anniu',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=True,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 06:10 , Processed in 0.426583 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表