简要
pyinstaller模块主要用于python代码打包成exe程序直接使用,这样在其它电脑上即使没有python环境也是可以运行的。
用法
一.安装
pyinstaller属于第三方库,因此在使用的时候需提前安装
pip install pyinstaller
二.配置spec文件
1.配置生成exe程序文件夹
(1)如果不熟悉spec配置内容,可以在终端运行如下指令生成固定模板
pyinstaller --name myapp main.py # myapp为生成的spec文件名称,main.py为打包的文件
运行之后,我们可以看到几个文件,可以直接删除dist和build文件。我看打开myapp.spec文件可以看见配置信息。
# -*- mode: python ; coding: utf-8 -*- block_cipher = none a = analysis( ['main.py','hello.py'], #注:要打包的模块,按照先后顺序运行 pathex=['c:/users/pythonproject'], #注:要打包的python源代码的路径列表。 binaries=[], datas=[], #注:要打包的非python资源(例如图像、配置文件等)列表。 hiddenimports=[''requests], #注:必需的隐藏导入列表,用于告诉pyinstaller找到其他未明确指定的依赖项。 hookspath=[], #注:一个路径列表,其中包含指定要自定义的钩子模块的目录。 hooksconfig={}, #注: runtime_hooks=[], #注:用于在应用程序运行时运行的python代码文件列表。 excludes=[], #注:不包括在生成的可执行文件中的模块列表 win_no_prefer_redirects=false, #注: win_private_assemblies=false, cipher=block_cipher, #注:用于加密python字节码的密码。 noarchive=false, ) pyz = pyz(a.pure, a.zipped_data, cipher=block_cipher) #注:a.pure: 一个布尔值,指示是否生成纯python字节码。如果为true,则pyinstaller将不包括任何二进制文件或库。
a.zipped_data: 用于包含onefile模式下的所有python脚本和资源的元组。
exe = exe( pyz, #注:一个pyz实例,其中包含要打包的所有python脚本和资源。 a.scripts, #注:应用程序的主python脚本列表。 [], exclude_binaries=true, name='myapp', #注:生成exe可执行文件的名称 debug=false, #注:一个布尔值,指示是否生成调试版本的可执行文件 bootloader_ignore_signals=false, #注:一个布尔值,指示是否忽略启动加载器的信号。 strip=false, #注:一个布尔值,指示是否对可执行文件进行符号剥离。 upx=true, #注:一个布尔值,指示是否使用upx压缩可执行文件 console=true, #注:是否开启dos窗口 disable_windowed_traceback=false, argv_emulation=false, target_arch=none, codesign_identity=none, entitlements_file=none, icon:'图标.ico' #注:用户生成exe文件的封面,后缀必须是ico格式,转换地址:https://convertio.co/zh/download/88c5806204642c8a1c10e65b1bef9b5886f6d8/ ) coll = collect( exe, #注:你的python脚本生成的可执行文件路径(通常是与spec文件同名的文件) a.binaries, #注:二进制对象列表,表示其他相关二进制文件的位置以及将它们复制到输出目录的相对路径。例如,如果您的应用程序需要音频或图像文件,则可以使用此参数将其包含在可执行文件中。 a.zipfiles, #注:压缩文件列表,表示应该从zip文件中提取哪些文件并将它们放入输出目录。这对于打包一些必需的库或数据文件非常有用。 a.datas, #注:数据文件列表,这些文件不应被压缩,但应该被复制到输出目录中。例如,这可能包括配置文件、模板文件或其他类型的文本文件。 strip=false, #注:是否从可执行文件和库中去除调试信息。默认情况下为true,这将减小文件大小,但会使得调试更加困难。 upx=true, #注:是否使用upx来压缩可执行文件和库。默认情况下为false,因为upx可能会导致某些文件无法正常工作。 upx_exclude=[], #注: name='myapp', #注:打包文件夹名称。 )
(3)通常我们只需要配置需要打包的模块 pathex 生成exe文件的名称 exe存在目录的名称,配置完后直接在终端输入指令进行打包。
pyinstaller myapp.spec
(4)打包完成后在项目所在目录下可以看下dist文件,dist文件下一目录就是打包文件夹,文件夹下面就是所在的程序。需要注意的是,由于我们打包的是整个文件夹,因此在分享给他人使用时,需要发送整个文件夹才能保证正确运行。
(5)配置要打包的模块,若模块之间存在import连接,可直接打包最终(main)运行的那个模块即可,pyinstaller会默认把main涉及的impor(.py 第三方库)全部一起打包。若两个py模块相互没有任何关联,这个时候可以打包多个。
2.配置生成独立的exe文件
(1)这里和上面步骤一样,先生成模板
pyinstaller -f main.py
(2)模板大概样式如下,字段意思和上面一致。
# -*- mode: python ; coding: utf-8 -*- block_cipher = none a = analysis( ['main.py'], pathex=[], binaries=[], datas=[], hiddenimports=[], 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='hello', 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, )
(3)配置完成后终端运行指令打包,打包完成后会看见dist目录下只有一个exe文件。
pyinstaller myapp.spec
除了配置spec文件,还可以直接通过pyinstaller指令来直接打包,这里就不做多介绍了