python代码打包成可执行文件(exe)

【前言】:我们在开发完一个小项目后,想要把项目发布出来给别人用。通常都会把代码打包成exe后再给别人,而不是让别人去安装运行环境再跑裸代码。本文就是介绍如何使用pyinstaller这个工具将python带包成可直接运行的exe。

▍概述

在介绍pyinstaller之前,先简单介绍下其它几个可以用于打包python代码的工具:

  • cx_Freeze:可以将Python脚本转换为独立的可执行文件,支持多个平台。

  • PyInstaller:可以将Python脚本(或模块)转换为单个可执行文件或目录,支持多个平台。

  • PyOxidizer:功能类似于PyInstaller,但它可以生成自包含的二进制文件,可以跨平台使用。

  • Py2exe:仅适用于Windows平台,可以将Python脚本转换为.exe可执行文件。

Pyinstaller打包代码的步骤有:

  1. 使用pip install pyinstaller命令安装pyinstaller库。

  2. pyinstaller提供两种打包方式;

    **方式一:**在cmd终端进入要打包的Python文件所在目录,使用pyinstaller xxx.py命令打包代码。

    **方式二:**在cmd终端进入要打包的Python文件所在目录,使用pyi-makespec xxx.py命令生成spec文件,然后对spec需要修改的区域做修改,再使用pyinstaller xxx.spec命令打包代码。

  3. 使用pyinstaller打包成功之后,产生两个文件夹:

    build文件夹:这是打包过程中临时文件的存放位置。这些文件包括 Python 源代码、打包脚本和其他一些中间文件。在成功打包应用程序后,该目录可以被安全地删除。

    dist文件夹:这是最终生成的可执行文件及其依赖项的存放位置。

▍方式一:命令行直接打包

使用命令行打包通常适用于简单的项目,不需要复杂的配置或自定义设置,也无需频繁重复打包的情况;假设我们的python代码如下,文件名为demo.py。


#demo.py
import os
path=os.getcwd()
print(f'当前文件路径:{path}')
os.system('pause')

打包步骤:


1. 在cmd终端中进入demo.py文件的所在目录。
2. 终端执行:pyinstaller -F demo.py

指令解释:


pyinstaller
[-F/-D]       # [产生当个可执行文件/产生一个目录(包含多个文件)作为可执行文件]
[-w/-c]       # [去掉命令行弹窗/显示命令行弹窗]
-i icon.ico   # 指定exe显示图标
demo.py     #打包的python文件

结果:

打包完成后在demo.py文件所在目录下生成build和dist两个文件夹,dist目录下的demo.exe即为我们打包后的可执行文件。点击demo.exe文件弹出小黑窗即为打包成功。

在这里插入图片描述

▍方式二:使用spec打包

spec文件打包适用于更大规模、更复杂的项目,以及需要自定义配置和频繁重复打包的时候使用;需要使用 .spec 文件进行打包的情况有:

  1. 有数据文件需要一起打包

  2. 把动态链接库一起打包

  3. 添加运行时选项

  4. 想要生成多个可执行程序,公共的模块分割出来给其他调用

假设我们的项目文件结构如下图所示。


PackingExe
|_ core|_ __init__.py|_ dict.txt|_ demo.py

demo.py文件


def resource_path(relative_path):""" 运行exe时获取资源文件的绝对路径"""base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))return os.path.join(base_path, relative_path)def main():print(f'当前文件路径:{os.getcwd()}')abs_path = resource_path('core/dict.txt')with open(abs_path, 'r', encoding='utf-8') as file:content = file.readline()print(content)os.system('pause')if __name__ == "__main__":main()

此处解释一下资源路径函数(resource_path);当exe在运行时,会生成一个临时文件夹,除代码之外的数据资源需要通过sys._MEIPASS访问临时文件夹获取。

打包步骤:


1. 在终端中进入PackingExe目录。
2. 生成spec文件:pyi-makespec -F demo.py    # 生成apec文件,支持-F,--key等参数,不支持--upx-dir
3. 修改spec文件
4. 执行打包命令:pyinstaller demo.spec   # 使用spec文件打包,不支持外部参数

如何正确编辑spec文件?

spec文件主要包含四个类:

  • Analysis类:用于分析 Python 模块之间的依赖关系,并对需要的东西进行打包。

  • PYZ类:是一个由多个Python文件组成的二进制文件。PYZ文件内部包含整个程序的代码和标准库,以及在脚本代码中使用的所有第三方库。

  • EXE类:指定要生成的可执行文件的相关信息,例如名称、平台、图标等。

  • COLLECT类:用于收集所有需要包含在可执行文件中的文件,并将其复制到构建目录中以供打包和部署使用。在-F模式下,是没有COLLECT类。

**加粗样式**

用于打包PackingExe项目的spec文件如下:


# -*- mode: python ; coding: utf-8 -*-block_cipher = Nonea = Analysis(['demo.py'],pathex=[],binaries=[],datas=[('core\dict.txt', 'core')],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='demo',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,
)

结果:

打包完成后在demo.py文件所在目录下生成build和dist两个文件夹,dist目录下的demo.exe即为我们打包后的可执行文件。点击demo.exe文件弹出小黑窗即为打包成功。

在这里插入图片描述

▍可能打包失败的原因

  • 程序有bug时,打包后的exe会出现闪退,而不是在小黑窗上报错;

  • 用于打包的python解释器路径不能有中文或空格;如果必须有可以修改python安装目录下的scripts/pyinstaller-script.py文件中的python.exe路径;

  • 最好在py文件首行添加# -*- coding:utf-8 -*-,否则exe容易编码错误;

相关代码资料已经打包好,领取方式看下方



除上述资料外,还附赠全套Python学习资料,包含面试题、简历资料等具体看下方。

🎁福利🎁 全网最全《Python学习资料》免费赠送🆓!

最近火热ChatGPT 等人工智能应用对 Python 编程语言产生了积极的影响,它推动了 Python 的普及和发展,在文本处理和 NLP 领域提升了 Python 的地位,促进了 Python 生态系统的成长

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python学习路线

python学习路线图1
在这里插入图片描述

二、Python基础学习

1. 开发工具

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

五、Python面试集锦

1. 面试资料

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

因篇幅有限,仅展示部分资料,添加上方即可获取。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Vivado中Vitis Model Composer无法打开的解决办法

目录 一、问题1、问题描述2、WINR键 在命令窗口中操作 二、解决办法 一、问题 1、问题描述 安装好官方提供的vivado 2021.1及其他扩展内容之后,双击无法打开Vitis Model Composer,只有命令窗口一闪而过; 2、WINR键 在命令窗口中操作 按如图…

jupyter闪退的解决方法以及卸载与安装教程

问题: 今天打开电脑准备使用jupyter,双击后指令窗口打开后闪退,无法正常使用软件,报错: C:\Users\***>jupyter notebook --generate-config Traceback (most recent call last): File "D:\LeStoreDownload\…

chatgpt赋能python:Python如何用快捷键运行程序?

Python如何用快捷键运行程序? Python是一门广泛使用的编程语言,开发者用它设计各种类型的程序和应用。在Python编程中,开发者需要经常运行程序来查看程序的输出结果。使用快捷键可以提高我们编写代码的效率和方便程度。那么,Pyth…

chatgpt赋能python:为什么我的Python程序经常闪退?详解Python闪退的原因及解决方案

为什么我的Python程序经常闪退?详解Python闪退的原因及解决方案 Python作为一门高级编程语言,在过去的十年中已经成为了众多开发者的首选语言。但是,即使是有10年Python编程经验的开发者,有时候也会遇到闪退的问题。这种问题很头…

chatgpt赋能python:Python运行为什么会闪退?可能的原因和解决方法

Python运行为什么会闪退?可能的原因和解决方法 如果你是一名有10年Python编程经验的工程师,你一定遇到过这种情况:当你想运行一个 Python 脚本或程序时,它会闪退,无法正常运行。这种情况有很多可能的原因,…

简单认识钢琴五线谱

作者:xg123321123 - 时光杂货店 出处:http://blog.csdn.net/xg123321123/article/details/77918249 声明:版权所有,转载请联系作者并注明出处 在提到五线谱之前,先简单认识下钢琴键盘。 钢琴键盘是由黑色键和白色键共…

核心乐理---五线谱基础

音符 音符的长度 音符的长度都是相对的定义 一般来说讲全音符设为一拍,但如果将二分音符设为一拍的话,全音符就是两拍 附点音符 可以在音符后跟上一个小点来改变音符的长度,如果一个音符后面跟了n个原点,它的长度就会变为原来的…

【五线谱】音高表示 ( 高音谱号 | C3 60 ~ B3 71 音高表示 | C4 72 音高表示 | C5 84 音高表示 )

文章目录 一、C3 ~ B3 音高表示1、C3 音符2、D3 音符3、E3 音符4、F3 音符5、G3 音符6、A3 音符7、B3 音符 二、C4 音高表示三、C5 音高表示 一、C3 ~ B3 音高表示 参考 【音频处理】音高 与 频率 对照表 ( 音符频率算法 ) 博客 , 分析音高与对应频率 ; 1、C3 音符 C3 音符 表示…

“邀请码” - 诈骗类应用分析

一、简述 该恶意应用运行后,私自读取用户的联系人和历史短信记录,后台静默上传到C2服务器,造成用户的隐私信息泄露。 二、样本信息 包名:fujinyueai.yes 应用名:附近约爱 文件SHA1:6c96510ba1b27d939dae7be…

恶意访问、黑产猖獗,如何做好业务安全“守门人”?丨创新场景50

关注ITValue,看企业级最新鲜、最价值报道! 数字化就是创新场景的叠加,钛媒体将推出「创新场景50」系列经典实例,遴选全行业优先应用案例,用通俗易懂的语言针对数字化创新实例进行解读汇总。后续将积累内容产品化&#…

解密加密的直播地址

现在国内除了斗鱼,熊猫等大的直播平台以外,还有很多的小平台,小平台技术有限,今天拿一个app示例 一般未加密的直播地址,直接用fidder就可以抓取到地址,但一些安全性较高的返回的地址是经过加密的,今天就来解密下某直播(你懂得)的地址(这个平台早gg了). 下面就是返回的直播地址…

互联网平台黑产解密(上)

互联网平台黑产解密(上) 这是一个最好的时代。互联网如此普及,市场有无限可能,大量的创业公司崛起,生活服务无不能连接到互联网,让人有了更多想象。 这也是最坏的时代。伴随着新型业务的出现和增长,黑色产业(以下简称黑…

直播带货app源码,进行直播平台的环境部署

直播项目环境部署 最近总是接到直播带货app源码的开发,在环境部署的过程中踩了不少坑。现在我将环境部署的完整教程分享给大家。 一 、搭建前期准备 注:操作系统centos7.0以上 64位,直播带货app源码服务器是否需要添加域名白名单(…

社群编码识别黑灰产攻击实践

导读:所谓黑灰产,包含网络黑产、灰产两条产业链,随着互联网的飞速发展,网络黑灰产也在不断演变,当前网络黑灰产已经趋于平台化、专业化、精细化运作。基于黑灰产攻击特点,我们提出了一种基于社群编码的黑灰…

直播鉴黄?直播商城开发是如何实现的

截图鉴黄配置的方式有哪些? 直播商城开发最重要的一步,就是实现直播鉴黄的功能,那么接下来就和我一起看看直播鉴黄是如何实现的吧。 方式:1,通过API设置;2,在【控制台】【功能模板】进行配置。…

超千人围观,普及 “反诈” 常见场景及应对手段,还有黑灰产攻防手段

10 月 26 日,由软件绿色联盟举办的 “反诈” 主题直播活动已圆满落幕。本次直播我们特邀了两位 360 的资深技术专家,对《电信网络诈骗趋势解读与应对》、《黑灰产攻防手段及关联产业链》两大议题进行了精彩分享。本次直播吸引了 1000 名线上观众观看&am…

记一次财经直播系统渗透

1、网站搜索关键词: 牛昆财经直播系统 牛昆喊单直播系统 牛昆微交易系统开发 2、sql注入漏洞 下载源代码进行分析,对站点进行本地搭建,测试sql注入点如下: 位置: sys\updsd.php 参数: $_GET[id] sql注入POC: ?…

值得收藏!教你如何在火星直播中使用分享码

火星直播是一个极其简洁又好用的电视直播软件,拥有我平时经常会收看到的中央电视台、湖南卫视、浙江卫视等海量频道。界面、操作简单便捷,还能使用它的分享码功能,看到一些有趣的海外电视直播频道。今天我就给大家推荐火星直播这款应用&#…

直播电商开发,源码无加密

随着直播电商的流行,很多企业开始使用商场电商直播系统,该企业使用电商直播系统的优势具体体现在哪里?下面由零七科技小编为您总结企业电商直播系统的优点。 使用电商直播系统的优点: 1、全面展示商品风格和效果。 与在线平台…

智能钱包系列新一期来了!解读 Devcon VI:Ambire 的创始人为大家带来重要信息!

Twitter Spaces 特别版:为大家带来波哥大这一周的见闻和故事! Ambire 的家人们,你们好!🙌 我们从 Devcon VI 回来了,这真的是一次精彩的行程!💥,不仅收获了大量的乐趣&am…