python 项目打包器pyinstaller实践

news2024/11/23 15:48:17

 

在创建了独立应用(自包含该应用的依赖包)之后,还可以使用 PyInstaller 将 Python 程序生成可直接运行的程序,这个程序就可以被分发到对应的 Windows 或 Mac OS X 平台上运行。

安装 PyInstalle

Python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块。

安装 PyInstaller 模块与安装其他 Python 模块一样,使用 pip 命令安装即可。在命令行输入如下命令:

pip install pyinstaller

强烈建议使用 pip 在线安装的方式来安装 PyInstaller 模块,不要使用离线包的方式来安装,因为 PyInstaller 模块还依赖其他模块,pip 在安装 PyInstaller 模块时会先安装它的依赖模块。

运行上面命令,应该看到如下输出结果:

Successfully installed pyinstaller-x.x.x

其中的 x.x.x 代表 PyInstaller 的版本。

在 PyInstaller 模块安装成功之后,在 Python 的安装目录下的 Scripts(D:\Python\Python36\Scripts) 目录下会增加一个 pyinstaller.exe 程序,接下来就可以使用该工具将 Python 程序生成 EXE 程序了。

PyInstaller生成可执行程序

PyInstaller 工具的命令语法如下:

pyinstaller 选项 Python 源文件

不管这个 Python 应用是单文件的应用,还是多文件的应用,只要在使用 pyinstaller 命令时编译作为程序入口的 Python 程序即可。

PyInstaller工具是跨平台的,它既可以在 Windows平台上使用,也可以在 Mac OS X 平台上运行。在不同的平台上使用 PyInstaller 工具的方法是一样的,它们支持的选项也是一样的。

下面先创建一个 app 目录,在该目录下创建一个 app.py 文件,文件中包含如下代码:

from say_hello import *
def main():
print('程序开始执行')
print(say_hello('孙悟空'))
# 增加调用main()函数
if __name__ == '__main__':
  main()

接下来使用命令行工具进入到此 app 目录下,执行如下命令:

pyinstaller -F app.py

执行上面命令,将看到详细的生成过程。当生成完成后,将会在此 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app.exe 文件,这就是使用 PyInstaller 工具生成的 EXE 程序。

在命令行窗口中进入 dist 目录下,在该目录执行 app.exe ,将会看到该程序生成如下输出结果:

程序开始执行
孙悟空,您好!

由于该程序没有图形用户界面,因此如果读者试图通过双击来运行该程序,则只能看到程序窗口一闪就消失了,这样将无法看到该程序的输出结果。

在上面命令中使用了-F 选项,该选项指定生成单独的 EXE 文件,因此,在 dist 目录下生成了一个单独的大约为 6MB 的 app.exe 文件(在 Mac OS X 平台上生成的文件就叫 app,没有后缀);与 -F 选项对应的是 -D 选项(默认选项),该选项指定生成一个目录(包含多个文件)来作为程序。

下面先将 PyInstaller 工具在 app 目录下生成的 build、dist 目录删除,并将 app.spec 文件也删除,然后使用如下命令来生成 EXE 文件。

pyinstaller -D app.py

执行上面命令,将看到详细的生成过程。当生成完成后,将会在 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app 子目录,在该子目录下包含了大量 .dll 文件和 .pyz 文件,它们都是 app.exe 程序的支撑文件。在命令行窗口中运行该 app.exe 程序,同样可以看到与前一个 app.exe 程序相同的输出结果。

PyInstaller 不仅支持 -F、-D 选项,而且也支持如表 1 所示的常用选项。
 

表 1 PyInstaller 支持的常用选项
-h,--help查看该模块的帮助信息
-F,-onefile产生单个的可执行文件
-D,--onedir产生一个目录(包含多个文件)作为可执行程序
-a,--ascii不包含 Unicode 字符集支持
-d,--debug产生 debug 版本的可执行文件
-w,--windowed,--noconsolc指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,--nowindowed,--console指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,--out=DIR指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,--path=DIR设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,--name=NAME指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

在表 1 中列出的只是 PyInstaller 模块所支持的常用选项,如果需要了解 PyInstaller 选项的详细信息,则可通过 pyinstaller -h 来查看。


下面再创建一个带图形用户界面,可以访问 MySQL 数据库的应用程序。

在 app 当前所在目录再创建一个 dbapp 目录,并在该目录下创建 Python 程序,其中 exec_select.py 程序负责查询数据,main.py 程序负责创建图形用户界面来显示查询结果。

exec_select.py 文件包含的代码如下:

import mysql.connector
def query_db():
    # ①、连接数据库
    conn = conn = mysql.connector.connect(user='root', password='32147',
        host='localhost', port='3306',
        database='python', use_unicode=True)
    # ②、获取游标
    c = conn.cursor()
    # ③、调用执行select语句查询数据
    c.execute('select * from user_tb where user_id > %s', (2,))
    # 通过游标的description属性获取列信息
    description = c.description
    # 使用fetchall获取游标中的所有结果集
    rows = c.fetchall()
    # ④、关闭游标
    c.close()
    # ⑤、关闭连接
    conn.close()
    return description, rows

mian.py 文件包含的代码如下:

from exec_select import *
from tkinter import *

def main():
    description, rows = query_db()
    # 创建窗口
    win = Tk()
    win.title('数据库查询')
    # 通过description获取列信息
    for i, col in enumerate(description):
        lb = Button(win, text=col[0], padx=50, pady=6)
        lb.grid(row=0, column=i)
    # 直接使用for循环查询得到的结果集
    for i, row in enumerate(rows):
        for j in range(len(row)):
            en = Label(win, text=row[j])
            en.grid(row=i+1, column=j)
    win.mainloop()
if __name__ == '__main__':
    main()

通过命令行工具进入 dbapp 目录下,在该目录下执行如下命令:

Pyinstaller -F -w main.py

上面命令中的 -F 选项指定生成单个的可执行程序,-w 选项指定生成图形用户界面程序(不需要命令行界面)。运行上面命令,该工具同样在 dbapp 目录下生成了一个 dist 子目录,并在该子目录下生成了一个 main.exe 文件。

直接双击运行 main.exe 程序(该程序有图形用户界面,因此可以双击运行),读者可自行查看运行结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/913635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高隔音活动隔断墙是一种设计用于隔离声音、提供隐私和创建灵活空间的分隔墙

高隔音活动隔断墙是一种设计用于隔离声音、提供隐私和创建灵活空间的分隔墙。这种隔断墙通常在需要随时改变房间布局的场合,如酒店、会议中心、展览厅、办公室等地使用。 以下是有关高隔音活动隔断墙的一些重要特点和优势: 1. 隔音性能:高隔音…

Protobuf在IDEA中的插件安装教程

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)

漏洞描述 Apache Ivy 是一个管理基于 ANT 项目依赖关系的开源工具,文档类型定义(DTD)是一种文档类型定义语言,它用于定义XML文档中所包含的元素以及元素之间的关系。 Apache Ivy 2.5.2之前版本中,当解析自身配置、Ivy 文件或 Apache Maven 的 POM 文件…

改变住宅区空气质量,你一定要知道!

在现代城市生活中,住宅区的环境质量对居民的健康和舒适感起着至关重要的作用。扬尘颗粒和噪声不仅直接影响人们的日常生活,还可能对居民的健康和生活品质造成持续的影响。 在不断提升环保意识的同时,政府、社区和居民也将共同努力&#xff0c…

0基础入门代码审计-2 Fortify初探

0x01 序言 目前又加入一位新童鞋了,最近将会再加入cs相关的专栏,都是以基础为主,毕竟太复杂的东西,能看懂的人太少。 0x02 准备工具 1、Fortify 2、需要审计的源码 0x03 Fortify的简单使用 1、 1、在开始菜单栏中找到Audit Wo…

【Flutter】Flutter 使用 font_awesome_flutter 展示图标

【Flutter】Flutter 使用 font_awesome_flutter 展示图标 文章目录 一、前言二、安装和基本使用1. 安装2. 基本使用示例3. 图标的命名和样式 三、自定义图标和高级功能1.动态检索图标2.排除样式和优化 四、完整示例五、总结 一、前言 在现代移动应用开发中,图标起着…

Dockerfile制作LAMP环境镜像

文章目录 使用Dockerfile制作LAMP环境镜像编写Dockerfile不修改默认页面修改默认页面 Start Script目录结构及文件登录私有仓库给镜像打标签上传镜像页面检查检测镜像可用性 使用Dockerfile制作LAMP环境镜像 编写Dockerfile 不修改默认页面 FROM centos:7 MAINTAINER "…

怎么把cad文件转成图片?

怎么把cad文件转成图片?我知道有些朋友经常需要制作各种 CAD 图纸。通常情况下,这些图纸以 DWG 格式保存,只能使用专业的 CAD 软件来打开。但是,如果你想与他人共享这些 CAD 图纸,并且对方的计算机上没有安装 CAD 软件…

实验五 Linux 内核的安装与加载

【实验目的】 掌握 uboot 的使用方法,能够使用 uboot 安装和加载内核 【实验环境】 ubuntu 14.04 发行版FS4412 实验平台 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行,以“#”开头的命令表 示在开发板下执行 【实验步骤】 …

cve-2023-3079漏洞与patch分析

POC function set(arr, key, val) {arr[key] val; } function leak_hole() {for(let i 0; i < 10; i) {set(arguments, "foo", 1);}set(new Array(), 0, 1);set(arguments, 0, 1);return arguments[1]; } %DebugPrint(leak_hole());分析 通过对此漏洞的patch分…

ASEMI新能源专用整流桥GBU816参数,GBU816封装

编辑-Z GBU816参数描述&#xff1a; 型号&#xff1a;GBU816 最大峰值反向电压(VRRM)&#xff1a;1600V 平均整流正向电流(IF)&#xff1a;8A 正向浪涌电流(IFSM)&#xff1a;200A 工作接点温度和储存温度(TJ, Tstg)&#xff1a;-55 to 150℃ 最大热阻(RθJC)&#xff1…

融云深度参与「新加坡 GTLC 大会」,连接亚太机遇、开拓国际市场

8 月 18 日&#xff0c;由 TGO 鲲鹏会主办的新加坡 GTLC&#xff08;Global Tech Leadership Conference&#xff0c;全球技术领导力大会&#xff09;圆满收官&#xff0c;融云作为共创伙伴深度参与了大会。关注【融云全球互联网通信云】了解更多 本次大会以“Connecting Asia…

RunnerGo性能测试时如何从数据库获取数据

我们在做性能测试或者场景测试时往往需要从数据库中获取一些真实的系统数据让我们配置的场景更加贴合实际。而RunnerGo也是在最近的大版本更新中推出连接数据库功能&#xff0c;本篇文章也给大家讲解一下具体的操作方法和实际应用场景。 配置数据库 首先进入RunnerGo页面&…

Java实现excel表数据的批量存储(结合easyexcel插件)

场景&#xff1a;加哥最近在做项目时&#xff0c;苦于系统自身并未提供数据批量导入的功能还不能自行添加上该功能&#xff0c;且自身不想手动一条一条将数据录入系统。随后&#xff0c;自己使用JDBC连接数据库、使用EasyExcel插件读取表格并将数据按照业务逻辑批量插入数据库完…

芯片行业入行小知识,快速学习!

进入芯片行业是一个充满挑战但又充满机会的领域。无论是作为工程师、设计师、销售人员还是管理者&#xff0c;以下是一些有关芯片行业入行的小知识。 1、什么是IC 集成电路的英文简称叫IC&#xff0c;IC即integrated circuit。如果有人和你说他做的是IT行业&#xff0c;那么你…

数字孪生能为教育事业带来什么新变化?

随着科技的飞速发展&#xff0c;数字孪生作为一种创新性技术&#xff0c;正在逐渐在各个领域展现出巨大的潜力。其中&#xff0c;教育领域也开始积极探索数字孪生的应用&#xff0c;为学习和教育带来了新的可能性和改变。在教育中&#xff0c;数字孪生可以用于创造具有真实性的…

Me-and-My-Girlfriend靶场

靶机下载&#xff1a; https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 一、信息收集 查找ip nmap -sP 192.168.16.0/24获取详细端口等信息 nmap -sV -sC -A -p 1-65535 192.168.16.209目录扫描 gobuster dir -u http://192.168.16.209 -w /usr/share/word…

无脑入门pytorch系列(五)—— nn.Dropout

本系列教程适用于没有任何pytorch的同学&#xff08;简单的python语法还是要的&#xff09;&#xff0c;从代码的表层出发挖掘代码的深层含义&#xff0c;理解具体的意思和内涵。pytorch的很多函数看着非常简单&#xff0c;但是其中包含了很多内容&#xff0c;不了解其中的意思…

Seaborn数据可视化(三)

1.绘制直方图 使用displot()绘制直方图。 import seaborn as sns import numpy as np import matplotlib.pyplot as plt# 生成随机数据 np.random.seed(0) data np.random.randn(1000)# 使用displot绘制直方图 sns.displot(data, bins10, kdeTrue)# 展示图形 plt.show() 结…

山西电力市场日前价格预测【2023-08-23】

日前价格预测 预测明日&#xff08;2023-08-23&#xff09;山西电力市场全天平均日前电价为327.31元/MWh。其中&#xff0c;最高日前电价为363.47元/MWh&#xff0c;预计出现在19: 45。最低日前电价为283.86元/MWh&#xff0c;预计出现在03: 30。 价差方向预测 1&#xff1a; 实…