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文件可以看见配置信息。
# -*- 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指令来直接打包,这里就不做多介绍了
来源:https://www.cnblogs.com/lihongtaoya/p/17349911.html
猜你喜欢
- 本文实例为大家分享了TensorFlow实现创建分类器的具体代码,供大家参考,具体内容如下创建一个iris数据集的分类器。 加载样本数据集,
- 一、AIML是什么AIML全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创
- Mysql的分页的两个参数select * from user limit 1,21表示从第几条数据开始查(默认索引是0,如果写1,从第二条
- 本文实例讲述了Python实现针对中文排序的方法。分享给大家供大家参考,具体如下:Python比较字符串大小时,根据的是ord函数得到的编码
- Create trigger tri_wk_CSVHead_History on wk_CSVHead_History --声明一个tri_
- mysql安装目录使用MySQL AB's Linux RPM分发进行安装后,将在以下系统目录产生文件目录目录内容/usr/bin客
- 1. 建表的语法建表属于 DDL 语句,DDL 语句包括:create、drop、alter…create table
- 假设三节点MGR某个节点异常,需要重新把这个节点加入到MGR集群中,具体操作过程如下:贡献者端执行(192.168.1.11)DROP US
- def Num2MoneyFormat( change_number ): ""&q
- 不知大家对精华区的表格排序终极优化是否还有记忆,当时讨论的结果曾以为是最快的JS排序了,实则不然,按前段时间我发的DHTML性能提升帖(转译
- 代码如下_init_.pyfrom flask import Flask, request, url_for, redirect, rend
- 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。以下文章来源于Python进击者 ,
- 上篇文章给大家介绍了 在 webpack 中使用 ECharts的实例详解 ,可以点击查看。1. 使用NPM安装(全局引入)执行下面的命令:
- 前言写程序已经丢掉很长一段时间了,最近觉得完全把技术丢掉可能是个死路,还是应该捡起来,所以打算借CSDN来记录学习过程, 由于以前没事的时候
- 蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确。下面我们将用p
- 创建变量变量是存放数据值的容器。与其他编程语言不同,Python 没有声明变量的命令。首次为其赋值时,才会创建变量。实例x = 10y =
- 1、预编译的好处大家平时都使用过JDBC中的PreparedStatement接口,它有预编译功能。什么是预编译功能呢?它有什么好处呢?当客
- Selenium Python 提供了一个简单的API 便于我们使用 Selenium WebDriver编写 功能/验收测试。 通过Sel
- 面试题有一个test.xml文件,要求读取该文件中products节点的所有子节点的值以及子节点的属性值。test.xml文件:<!-
- 假设要实现一个存放多种类型数据结构的对象,比如一个存放算术操作数和操作符的树结点,需要存放包含一元操作符、二元操作符和数字类型的结点clas