pyinstaller将python程序打包为可执行文件
作者:芥末拌饭 发布时间:2022-06-05 17:11:35
前言
对于专业的python程序员来说,python打包工具或许用得并不多。但是对于非专业人士来说,你给他写个python项目,要让他安装python、安装依赖等等,估计人都会抓狂。或者说,如果你不想暴露自己的项目代码,python打包工具就派上用场了,市面上有多种打包工具,这里就讲讲最常用的pyinstaller的使用方法吧。
pyinstaller简介
pyinstaller是一个python打包工具,它将python程序及所需依赖都打包成一个可执行文件。
说详细点就是:输入指定的python脚本,pyinstaller首先会分析脚本所依赖的其他脚本,查找后将所有脚本收集起来(包括python解释器),最后将这些文件放到一个目录下,或者是打包到一个可执行文件中。打包后我们只需要执行可执行文件即可,无需再安装繁杂的python环境。
需要注意的是,pyinstaller不是交叉编译器。就是说如果你要将python程序打包成一个能在windows运行的文件,那么你只能在windows上使用pyinstaller来完成打包过程,而不能在其他系统如linux、macos上打包。
pyinstaller下载
首先,因pyinstaller支持python的版本需>=3.7,所以我们要确保在python3.7或更新的版本上使用。
安装:
pip install pyinstaller
下载完成后,运行pyinstaller -h
,显示如下则安装成功。
pyinstaller使用
准备好程序代码
这里以一个简单的python程序为例,新建一个a.py文件,内容如下:
import fire
def print_msg(msg):
print("print here:", msg)
if __name__ == "__main__":
fire.Fire(print_msg)
打包程序
常用到的命令:
标题 | 参数 | 说明 |
---|---|---|
-F | pyinstaller -F a.py | 在dist目录下生成一个可执行文件 |
-D | pyinstaller -D a.py | 在dist目录中,除了可执行文件,还会生成依赖文件 |
这里使用第一种方式来生成文件,执行pyinstaller -F a.py
执行后,我们可在当前目录下看到多了几个文件/目录,分别是a.spec、build目录、dist目录。
.spec文件:记录的是打包参数等信息,也可以预先准备好spec文件直接打包。
build目录:记录的是打包所产生的文件,我们可忽略。
dist目录:放的是可执行文件及依赖,例子中dist目录下的a文件就是可执行文件。
$ ls
a.py a.spec build/ dist/
$ ls dist
a
运行一下试试:./dist/a 你好
$ ./dist/a 你好
print here: 你好
结果如预期,打包就完成了。接下来我们将dist目录给到需要的人就行了。
小结
这里简单介绍了pyinstaller的使用方法,在我们需要打包python程序的时候,pyinstaller是不二之选。特别需要注意的是,pyinstaller不能跨系统使用哦。
来源:https://juejin.cn/post/7132357317827739656


猜你喜欢
- 前言摘要昨天和同事merge代码又遇到了很多冲突,发现之前有些方法写的参数不规范,没有传入Context,不方便进行链路追踪。他在revie
- 前言最近在开发环境 oracle 启动侦听的时候,出现了 TNS:permission denied 的问题,通过网上和咨询朋友,最终找到了
- 前言今天,一起用 Python 来理一理红楼梦里的那些关系不要问我为啥是红楼梦,而不是水浒三国或西游,因为我也鉴定的认为,红楼才是无可争议的
- 前言学习Python的过程中,比较喜欢通过实际的小项目进行巩固学习,决定写一个弹跳小球的程序。这个实战例程是在公众号上看到的,他的编写过程比
- 1.安装模块Python 要使用 redis,需要先安装 redis 模块:pip install redis测试安装:redis 取出的结
- 1、Motivation:I wanna modify the value of some param;I wanna check the
- 本文实例讲述了python去除所有html标签的方法。分享给大家供大家参考。具体分析如下:这段代码可以用于去除文本里的字符串标签,不包括标签
- 无限分类是实际开发中经常用到的一种数据结构,一般我们称之为树形结构。题设:类似淘宝的商品分类,可以在任意分类设置其子类。 一、创建
- 在看本篇文章前我们需要了解阻塞的概念在执行过程中暂停,以等待某个条件的触发 ,我们就称之为阻塞在Go中我们make一个channel有两种方
- 接着上一篇学习:https://www.jb51.net/article/70528.htm七、MySQL数据库Schema设计的性能优化高
- 前言既然组件不提供view服务引擎,那在编写应用网站的时候只能由javascript调用接口进行UI整合,这样编写javascript来访问
- 使用字符串第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代,计算机处
- 博主一直在维护一个导出PDF的服务,但是这个服务导出的PDF文件是真的巨大,动辄就上百MB。这里面主要是图片占据了大多数体积,所以考虑在导出
- 本文实例讲述了Python多重继承的方法解析执行顺序。分享给大家供大家参考,具体如下:任何实现多重继承的语言都要处理潜在的命名冲突, 这种冲
- 本文实例讲述了python通过索引遍历列表的方法。分享给大家供大家参考。具体如下:python中我们可以通过for循环来遍历列表:colou
- <%If(Request.QueryString("Page")="") ThenPage=1
- 一直以来都是链接SQL Server数据库服务但是在部署时将很麻烦,所以突发奇想,直接连接到MDF文件,刚开始还很混乱不会连接,后来向导,连
- 保存Python程序,可以使用以下方法:使用编辑器编写代码并保存1、打开Notepad++2、需要新建文本时,点击左上角”文本“,在弹出的菜
- 应用OpenCV和Python进行SIFT算法的实现如下图为进行测试的gakki101和gakki102,分别验证基于BFmatcher、F
- kNN算法是k-近邻算法的简称,主要用来进行分类实践,主要思路如下:1.存在一个训练数据集,每个数据都有对应的标签,也就是说,我们知道样本集