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:
  1. Analysis:以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息
  2. PYZ:是一个.pyz的压缩包,包含程序运行需要的所有依赖
  3. EXE:根据上面两项生成
  4. COLLECT:生成其他部分的输出文件夹,COLLECT也可以没有。

在这里插入图片描述
test.spec文件

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = 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整个文件夹拷贝过去。

  • 12
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值