用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)(二)

简介: 用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)(二)

5、打包生成文件的位置

让我们回到最初切换的文件夹里,我们可以看到,多了下面三个文件(build 文件夹、dist 文件夹和 spec 文件):文件夹

我们想要的 exe 文件就在新生成的 dist 文件夹里面。此时的 exe 文件有可能还运行不了,因为它可能涉及到一些资源文件或者其他的 Python 文件。将它们放到同一文件夹下即可正确运行。


这里说明一下,打包完之后,spec 文件和 build 文件夹就没用了,可以删除了。


这里一般的打包方式产生的 exe 文件都比较大,这是因为 Pyinstaller 打包的时候会把你环境中的库和模块全部打包进去,这就会使一些你根本用不着的库和模块也被打包进去了!而且这些库被打包之后不仅会使 exe 文件变大,还会使其运行变卡变慢、变得十分臃肿。因此,不建议这样的打包方式。十分地建议大家用第二种方式进行打包 —— 虚拟环境下的打包。

虚拟环境下的打包

所谓的虚拟环境,就是我们自己创建一个小型的 Python 环境,也可以这样理解,自己创一个新的、纯净的、没有奇奇怪怪的第三方库和模块的 Python 环境。这个环境你也是可以用来编写 Python 程序的,但这里我们是要来打包 exe 的,这就要求它里面的库和模块尽可能的少。

0、先介绍几个 conda 命令

① 导出虚拟环境的列表

conda env list

② 导出当前环境的包

conda list

③ 启动/切换至名为name的Python环境

conda activate name

② 导出当前环境的包

conda list

③ 启动/切换至名为name的Python环境

conda activate name

退出后会自动回到base环境

⑤ 创建新的、名为name的、Python 版本为3.x的虚拟环境

conda create -n name python==3.x

1、创建虚拟环境

和一般的打包方式一样,打开 Anaconda Prompt,然后输入如下格式的命令:

conda create -n env_1 python==3.10.8

询问

这里它会停下来询问你新的环境是否要安装这些包,这些包大部分都是一些必须的包,直接输入 y 或者直接回车即可。

2、安装需要的第三方包

这样,我们的虚拟环境就弄好了!但是!这并不代表着它就是符合你程序运行的环境,如果你的 Python 程序还用到了一些其他的第三方库,那么就一定要把这些库给添加进这个虚拟环境,添加方式就是直接在当前环境下用 pip。下载库很慢的,可以在 pip 时加上镜像源的地址:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包的名字

这里有一点很关键!不能忘记!Pyinstaller 也是第三方的包,所以新的环境里面一定一定要 pip install Pyinstaller!

其他的打包步骤和一般的打包方式一模一样,请看上面的步骤。

3、追求极致的exe大小(非必要步骤)

如果你想让你的 Python 程序打包后的 exe 大小,小到不能再小的话,那么就要尽可能地删去虚拟环境里面的一些用不到的包(用 pip uninstall 来删)。


我这里有一个环境的包,它已经把一般程序用不到的包删干净了(没有第三方包)。你可以参考一下(通过输入 conda list 命令来查看)。

追求极致

多 Python 文件的打包

或许对于单个文件而言,你已经清楚该怎么做了,但是对于多个 Python 文件同时打包而言,你未必清楚。


我相信我们大多数人在编写大项目的时候,都会将一个程序拆解成多个 Python 文件以便于维护。但是前面的打包方式又只能打包一个 Python 文件,其他的 Python 文件就只能作为资源文件放在外面。但是这样别人使用这个程序的时候,不就能看到那些在外面的 Python 文件的源代码了吗?谁愿意把源代码给别人免费看呢?


所以,我们就要将多个 Python 文件同时打包!这里要说一点,这里的多个 Python 文件同时打包时,还是要使用 -F 参数,生成一个文件,


这里可以创建虚拟环境来打包,也可以不用。

1、生成spec文件

同之前的步骤一样,先打开 Anaconda Prompt,然后输入如下命令以生成 Python 源文件 name.py 的 spec 文件,这里的 name.py 一般选取多个 Python 文件的主文件。

pyi-makespec -option1 -option2 -... name.py

option 参数和之前步骤里的一样,输入你需要的参数即可。回到我们源代码的文件夹中,可以发现已经多了一个 name.spec 的文件了。

2、编辑spec文件

spec 文件实际上就是一个文本格式的文件,可以用任意文本编辑器打开,也可以用你的 IDE 直接打开,细心的人会发现,里面的内容实际上就是 Python 格式的代码,只不过文件扩展名改成了 spec 而已。


spec 文件实际上就包含了打包的所有参数,我们可以对其进行修改,以达到自定义打包的效果。


找到下面的这句:


spec 文件

它实际上就是个列表!将你需要的 Python 文件的路径(允许相对路径)都以字符串的形式写进这个列表里面,如果是与 name.py 不在同一目录(同一文件夹)下的 Python 文件,那就要写它的绝对路径。编辑完之后,记得保存文件。

3、以spec文件进行打包

回到之前的命令行(Anaconda Prompt),输入以下命令进行打包。

Pyinstaller name.spec

慢慢等待,打包完之后,就是我们想要的 exe 文件了,它把所有的 Python 文件都加了进去!但是很可惜,资源文件还是要放在同一目录下才可以正确运行 exe 程序。不过我还是极力推荐这种方式!我每次打包就是用的这一种方式,毕竟资源文件也不是必须打包进 exe 才好的,有些时候,我们的 Python 代码一般都不会超过 1MB 吧(想必大部分人都没有),而资源文件却有大几十甚至几百 MB,打包进去之后,会使得 exe 程序运行变慢,这不好。


而且,你想啊,现在大部分的软件,资源文件啊什么的不都是放在 exe 外面的么?

包含资源文件的打包

这个打包方式,就是对多个 Python 文件的打包方式的补充。

0、一点吐槽

 说到这个,我不得不吐槽一句,网上大部分的打包资源文件的方法都是一模一样的,繁琐且复杂,而且好多根本都实现不了,搞得我当时初学的时候一脸懵……,什么引用 os、sys 库搞些什么路径操作啊什么的,辣么麻烦,还有什么把图片文件用 base64 硬编码的啊什么的,也不解释原理,只能说离谱……


       Python 的简约风格都被他们忘得一干二净了!对于打包资源文件的路径问题,虽然它打包后认不得相对路径,但是绝对路径总是认得的嘛,没有程序不认识绝对路径!


       有人说绝对路径改不了啊,到别人的电脑上怎么运行呢?我只能说……你见识短浅了!一个简单的装饰器知识就可以解决的问题!

好了,不吐槽了,继续说正事。

多个 Python 文件的打包还是和之前讲到的一样,这里只说资源文件的方法。也是一样的,编辑 spec 文件。

1、编辑spec文件

我的建议是,把资源文件(或者文件夹)都统一放在一个与 Python 文件同一目录下的的 res 文件夹里,方便打包,就如下图。

然后,将下图中标识的这一行改成这样:

spec 文件

改完记得保存!

目录
相关文章
|
1月前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
6天前
|
安全 API C语言
Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
32 6
|
18天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
1月前
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
61 9
|
29天前
|
存储 人工智能 数据挖掘
Python编程入门:打造你的第一个程序
本文旨在为初学者提供Python编程的初步指导,通过介绍Python语言的基础概念、开发环境的搭建以及一个简单的代码示例,帮助读者快速入门。文章将引导你理解编程思维,学会如何编写、运行和调试Python代码,从而开启编程之旅。
39 2
|
1月前
|
Python
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
44 5
|
1月前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
32 1
|
4月前
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
|
6月前
|
存储 Python 内存技术
python WAV音频文件处理—— (1)读写WAV文件
python WAV音频文件处理—— (1)读写WAV文件
166 14
|
7月前
|
数据挖掘 索引 Python
Python 读写 Excel 文件
Python 读写 Excel 文件
171 0

热门文章

最新文章