700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python3_将多个.py文件打包成exe程序并添加图标

python3_将多个.py文件打包成exe程序并添加图标

时间:2023-06-26 12:35:23

相关推荐

python3_将多个.py文件打包成exe程序并添加图标

前言

 我们开发的脚本一般都会用到第三方包,当别人需要用到我们脚本的时候,如果我们直接把xxx.py文件发给她,她是没有办法直接使用的,她还需要安装python解释器和安装我们使用的第三方包,这个时候对于她来说就很麻烦,那我们应该怎么让她不需要搭建环境了?这个时候我们就可以用到pyinstaller模块了,我们直接打一个exe包,发给她使用,这个时候她不需要任何环境,直接双击运行即可。

一、安装pyinstaller

 打开DOS窗口输入以下命令:

pip install pyinstaller

二、打包教程

 以下会介绍两种打包方式。第一种是把所有.py文件打包成单个exe程序,第二种是把所有.py文件打包成一个目录文件夹,包含exe程序和一些依赖文件(项目工程很大时,建议使用这个)。

 1、单个可执行exe文件

同一个文件夹下

(1)打包的项目为Tkinter目录下的所有.py文件,其中test.py为主文件。

 (2)在Tkinter目录下新建一个package.spec文件。

 (3)并在文件中写入以下内容,根据自己的项目进行相应的修改。

# -*- mode: python ; coding: utf-8 -*-block_cipher = None# 所有需要打包的.py文件, test.py为执行文件file = ['test.py','test1.py','test2.py']a = Analysis(file,pathex=['C:\\Users\\Admin\\Desktop\\Tkinter'], # 此列表为项目绝对路径binaries=[],datas=[],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='test', # 程序exe的名称debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=True #此处console=True表示,打包后的可执行文件双击运行时屏幕会出现一个cmd窗口,不影响原程序运行,如不需要执行窗口,改成False即可)

(4)通过pyinstaller打包spec文件

pyinstaller package.spec

 打包成功后,会显示以下信息,C:\Users\Admin\Desktop\Tkinter\dist\test.exe为打包后exe执行文件路径

不同文件夹下

# -*- mode: python ; coding: utf-8 -*-block_cipher = None# 所有需要打包的.py文件, test.py为执行文件file = ['test.py','./folder1/test1.py','./folder2/test2.py']a = Analysis(file,pathex=['C:\\Users\\Admin\\Desktop\\Tkinter'], # 此列表为项目绝对路径binaries=[],datas=[],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='test', # 程序exe的名称debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=True, #此处console=True表示,打包后的可执行文件双击运行时屏幕会出现一个cmd窗口,不影响原程序运行,如不需要执行窗口,改成False即可icon='C:\\Users\\Admin\\Desktop\\Tkinter\\1.ico') #程序图标,要绝对路径

2、打包为目录(包含exe和一些依赖文件)

 (1)生成主函数对应的spec文件,命令

在Tkinter路径下使用:pyi-makespec test.py

执行命令后,Tkinter目录下会生成test.spec文件

 (2)修改spec文件,加入需要打包的所有python文件

spec文件中主要包含4个class: Analysis, PYZ, EXE和COLLECT: Analysis:以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息PYZ:是一个.pyz的压缩包,包含程序运行需要的所有依赖EXE:根据上面两项生成COLLECT:生成其他部分的输出文件夹,COLLECT也可以没有。

test.spec文件

# -*- mode: python ; coding: utf-8 -*-block_cipher = Nonea = Analysis(['test.py','test1.py','test2.py','test3.py'], #所有要打包的.py文件pathex=['C:\\Users\\Admin\\Desktop\\Tkinter'], #此列表为项目绝对路径binaries=[],datas=[('1.png','img')], # 此处可以添加静态资源,例如你有个图片文件夹img,可以这样写[('1.png','img')],1.png图片要有路径,我这里是放在代码同个目录下的,打包以后会有一个img文件夹#[('1.png','img'),('test.txt','.')],生成多个文件夹,点表示当前文件夹。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,[],exclude_binaries=True,name='test88', #程序exe的名称debug=False,bootloader_ignore_signals=False,strip=False,upx=True, # 打包的时候进行压缩,False表示不压缩console=True, #此处console=True表示,打包后的可执行文件双击运行时屏幕会出现一个cmd窗口,不影响原程序运行,如不需要执行窗口,改成False即可。icon='C:\\Users\\Admin\\Desktop\\Tkinter\\1.ico') #程序图标,要绝对路径coll = COLLECT(exe,a.binaries,a.zipfiles,a.datas,strip=False,upx=True,upx_exclude=[],name='test') #程序文件夹名称

 (3)通过pyinstaller打包spec文件

pyinstaller test.spec

此时项目下多了两个目录,进入dist目录,找到dist路径下后缀名为exe的文件。这里为dist下目录test下的test88.exe

注:如果要在其他电脑运行程序,需要把test整个文件夹拷贝过去。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。