python利用pyinstaller打包生成exe

2024-06-19 09:38

本文主要是介绍python利用pyinstaller打包生成exe,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pyinstaller简明教程

安装pyinstaller

pip install pyinstaller是最简单的安装方式,但也常常由于各种原因报错,这就需要我们通过whl文件来下载,但是whl文件安装也有考究,具体参考可以参考教程:
Python安装whl文件那些坑

pyinstaller基本用法

安装和使用可以参考: PyInstaller 的安装和使用

假如我们要打包一个demo.py文件,基本过程是:

打开cmd,并切换到demo.py文件所在的目录,注意路径中不要有中文
执行命令:pyinstaller demo.py
在当前的目录下,将会生成两个文件夹:build和dist。dist里面就是所有可执行文件,点击demo.exe就能运行了。

pyinstaller指令的常见可选参数:

可选参数格式举例功能说明
-Fpyinstaller -F demo.py只在dist中生产一个demo.exe文件。
-Dpyinstaller -D demo.py默认选项,除了demo.exe外,还会在在dist中生成很多依赖文件,推荐使用。
-cpyinstaller -c demo.py默认选项,只对windows有效,使用控制台,就像编译运行C程序后的黑色弹窗。
-wpyinstaller -w demo.py只对windows有效,不使用控制台。
-ppyinstaller -p E:\python\Lib\site-packages demo.py设置导入路径,一般用不到。
-ipyinstaller -i D:\file.icon demo.py将file.icon设置为exe文件的图标,推荐一个icon网站:icon

上面的可选参数可以组合使用,比如:
调试时使用 pyinstaller -c -i D:\file.icon demo.py
最终版本 pyinstaller -F -w demo.py -i D:\file.icon
能够from xxx import yyy就尽量不要import xxx,这样可以减少打包后的体积。

添加外部数据库

使用参数–add-data,注意后面分号和指定路径
pyinstaller -F -w demo.py --add-data ./lib/opencv_videoio_ffmpeg411_64.dll;.
或者编辑spec文件如图
在这里插入图片描述

pyinstaller高阶功法

一般而言,pyinstaller的基本用法已经够用了,但是有特殊需求,比如打包图片资源文件时,就必须用到它的高阶功法了。

首先得了解spec文件,简而言之,spec文件就是一份告诉pyinstaller如何打包的配置文件。
可以通过pyi-makespec demo.py来生成demo.spec文件。其内容如下:

# -*- mode: python -*-

block_cipher = None

resources = ((“inspurer.db”, “.”), (“dlib_face_recognition_resnet_model_v1.dat”, “.”),
a = Analysis([‘workAttendanceSystem.py’],
pathex=[‘C:\Users\lenovo\Desktop\test\python’],
binaries=[],
datas=resources,
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=‘workAttendanceSystem’,
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name=‘workAttendanceSystem’)

对于上面这个文件,需要注意两点:

除了resources配置是我添加修改之外,其余全是自动生成,这个配置是用来添加资源文件的。
pathex是工程的根目录。

生成并配置好spec文件后,我们可以通过pyinstaller demo.spec来执行打包任务。

一点经验

pyinstaller打包的exe体积往往都非常巨大,而且打包过程非常耗时,和C/C++编译的exe目测差了几个数量级,所以一般没有这个必要去把一个大的python工程打包成exe可执行文件。

在代码里面尽量使用from xxx import xxx的格式来加载模块

这也许能减小exe的体积,但很多时候并不能达到想要的效果,因为一个模块往往都会加载其他大量的模块,我想这也是未来python如果想要成为大型软件开发工程的热门语言所要克服的一个重大缺点吧。

exe工具及代码

闲时写了一个将txt文件转换成excel和echarts图形的小工具,具体代码和exe工具请下载资源文件

这篇关于python利用pyinstaller打包生成exe的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074665

相关文章

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

android 带与不带logo的二维码生成

该代码基于ZXing项目,这个网上能下载得到。 定义的控件以及属性: public static final int SCAN_CODE = 1;private ImageView iv;private EditText et;private Button qr_btn,add_logo;private Bitmap logo,bitmap,bmp; //logo图标private st

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

python 喷泉码

因为要完成毕业设计,毕业设计做的是数据分发与传输的东西。在网络中数据容易丢失,所以我用fountain code做所发送数据包的数据恢复。fountain code属于有限域编码的一部分,有很广泛的应用。 我们日常生活中使用的二维码,就用到foutain code做数据恢复。你遮住二维码的四分之一,用手机的相机也照样能识别。你遮住的四分之一就相当于丢失的数据包。 为了实现并理解foutain

python 点滴学

1 python 里面tuple是无法改变的 tuple = (1,),计算tuple里面只有一个元素,也要加上逗号 2  1 毕业论文改 2 leetcode第一题做出来

Python爬虫-贝壳新房

前言 本文是该专栏的第32篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某房网为例,如下图所示,采集对应城市的新房房源数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM6Ly93aC5mYW5nLmtlLmNvbS9sb3VwYW4v 目标:采集对应城市的

python 在pycharm下能导入外面的模块,到terminal下就不能导入

项目结构如下,在ic2ctw.py 中导入util,在pycharm下不报错,但是到terminal下运行报错  File "deal_data/ic2ctw.py", line 3, in <module>     import util 解决方案: 暂时方案:在终端下:export PYTHONPATH=/Users/fujingling/PycharmProjects/PSENe

将一维机械振动信号构造为训练集和测试集(Python)

从如下链接中下载轴承数据集。 https://www.sciencedirect.com/science/article/pii/S2352340918314124 import numpy as npimport scipy.io as sioimport matplotlib.pyplot as pltimport statistics as statsimport pandas