Python pyinstaller库的安装配置教程分享

作者:余生没有余生 时间:2023-06-20 02:08:22 

简要

pyinstaller模块主要用于python代码打包成exe程序直接使用,这样在其它电脑上即使没有python环境也是可以运行的。

用法

一.安装

pyinstaller属于第三方库,因此在使用的时候需提前安装

pip install pyinstaller

二.配置spec文件

1.配置生成exe程序文件夹

(1)如果不熟悉spec配置内容,可以在终端运行如下指令生成固定模板

pyinstaller --name myapp main.py  # myapp为生成的spec文件名称,main.py为打包的文件

(2)运行完后我们会看见如下几个文件,dist和build直接删除即可。我看打开myapp.spec文件可以看见配置信息。

Python pyinstaller库的安装配置教程分享

# -*- 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文件下一目录就是打包文件夹,文件夹下面就是所在的程序。这里需要注意的是,因为我们打包的是文件夹,因此发给别人使用的时候,因把整个文件夹发过去,才能正确运行。

Python pyinstaller库的安装配置教程分享

 (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

Python pyinstaller库的安装配置教程分享

除了配置spec文件,还可以直接通过pyinstaller指令来直接打包,这里就不做多介绍了

来源:https://www.cnblogs.com/lihongtaoya/p/17349911.html

标签:Python,pyinstaller
0
投稿

猜你喜欢

  • np.ones的使用小结

    2021-05-20 06:55:34
  • 深入理解Python中的 __new__ 和 __init__及区别介绍

    2022-11-15 12:23:36
  • 提升MySQL查询效率及查询速度优化的四个方法详析

    2024-01-14 21:05:11
  • Python创建多线程的两种常用方法总结

    2023-11-16 16:41:09
  • Python实现为PDF去除水印的示例代码

    2023-03-05 04:27:56
  • Python常见数据结构详解

    2021-10-28 22:07:33
  • 解决Pandas to_json()中文乱码,转化为json数组的问题

    2023-12-05 19:06:33
  • 初探TensorFLow从文件读取图片的四种方式

    2021-08-06 06:04:34
  • Django权限设置及验证方式

    2022-12-28 23:45:18
  • Zen Coding: 一种快速编写HTML/CSS代码[译]

    2009-12-16 12:53:00
  • Python安装教程全过程(2022最新)

    2022-05-09 06:10:55
  • Asp与JS的数组和字符串下标介绍

    2022-10-11 13:40:25
  • Python图像处理库crop()函数 thumbnail方法使用详解

    2022-12-26 05:57:46
  • SQL Server实现全文搜索查询详解

    2024-01-23 05:19:13
  • javascript 通过键名获取键盘的keyCode方法

    2024-04-22 22:18:21
  • When we`re only No.2, we try harder之淘宝节日LOGO互动设计小探讨

    2010-01-20 10:31:00
  • SQL开窗函数的具体实现详解

    2024-01-26 12:16:37
  • PyQt5每天必学之QSplitter实现窗口分隔

    2021-12-26 16:33:48
  • PHP运行环境配置与开发环境的配置(图文教程)

    2024-05-11 09:24:46
  • 图像检索之基于vlfeat实现SIFT特征

    2021-11-18 13:13:40
  • asp之家 网络编程 m.aspxhome.com