Python之pyinstaller打包成可执行文件执行

参考:https://www.cnblogs.com/mywolrd/p/4756005.html

0 背景

在 TX2 嵌入式上用python开发时,为了隐藏python源码,或者说交付客户时减少操作,避免重复安装一堆依赖库,需要将源码打包为可执行文件,查看了好几种方式,用得比较广的是pyinstaller。

PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装python和你的脚本依赖的库。在Linux操作系统下,它主要用的binutil工具包里面的lddobjdump命令。

PyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。

可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其他包,或某个版本的Python,就可以直接运行了。

需要注意的是,PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。

1 安装

直接通过 pip 安装即可

pip install pyinstaller

安装完之后,可输入pyinstaller --version来查看是否成功 

安装成功后,就可以使用下面的命令了:

  • pyinstaller : 打包可执行文件的主要命令,详细用法下面会介绍。
  • pyi-archive_viewer : 查看可执行包里面的文件列表。
  • pyi-bindepend : 查看可执行文件依赖的动态库(.so或.dll文件)
  • pyi-... : 等等。

2 打包代码

pyinstaller的运行格式如下

pyinstaller [options] script [script ...] | specfile

其中:

script为要打包的python脚本

specfile为打包时的配置文件,这个文件会默认生成,也可以手动修改配置

比如新建一个test.py文件,里边只有一句简单的print语句

print("This is a test")

然后在该目录中运行如下指令

pyinstaller test.py

会在目录中生成build文件夹和dist文件夹,dist文件夹下就是能发布的可执行文件,里边包含了各种动态库文件,在终端中打开dist/test文件夹,运行如下指令

./test

可以正常输出脚本中的结果

当然,如果你的脚本很简单,没有太多的依赖关系,生成可执行文件的时候,可以把所有的动态库文件和可执行文件全部打包为一个文件,这样在发布的时候就可以避免动态库丢失造成运行失败,只需要加一个参数-F即可,如下

pyinstaller -F test.py

这个时候再打开dist文件夹可看到里边只有一个test可执行文件,但这样做有几个缺点:

(1)可执行文件变大,运行时速度会变慢

(2)对于复杂的工程,比如会调用第三方的库,这样生成可能会导致无法运行

因此,建议选用第一种方式,将所有的动态链接库都显示出来,如果在运行可执行文件的时候提示缺少库,可以从其它地方复制过来,也可以运行起来,而且如果程序有更新,只需要替换可执行文件即可,里边的动态链接库都不需要动

3 开机自启动

上边将要执行的代码打包为可执行文件了,接下来要做的是让TX2开机是自动运行这个可执行文件

关于TX2开机自运行程序,我在《NVIDIA TX2设置开机自启动程序》有过介绍,只需要在command中选择刚才生成的可执行文件即可,这里就不再赘述。

### 使用 PyInstallerPython 脚本打包可执行文件 PyInstaller 是一个非常流行的工具,它能够将 Python 应用程序及其依赖项打包成独立的可执行文件(如 Windows 上的 `.exe`),以便在没有安装 Python 解释器和其他库的情况下运行。以下是关于如何使用 PyInstaller 的详细介绍: #### 1. 安装 PyInstaller 首先需要确保环境中已安装有 Python 和 pip。然后可以通过 Pip 来安装 PyInstaller: ```bash pip install pyinstaller ``` #### 2. 创建简单的 Python 程序 假设我们有一个名为 `hello.py` 的脚本内容如下所示: ```python print("Hello World!") ``` #### 3. 使用 PyInstaller 打包 进入到包含该脚本的工作目录下,并输入下面这条命令行来创建单个可执行文件: ```bash pyinstaller --onefile hello.py ``` 此命令会做以下几件事: - 自动生成所需的临时工作区,默认会在当前路径生成名为 `build` 文件夹。 - 编译指定的 Python 源代码及所有依赖模块至字节码级别。 - 构建最终产品——即放置于新建立的 dist 目录下的单一 exe 可执行文件。 如果想要自定义输出名称或者其他高级设置,可以参考官方文档了解更多可用参数配置选项。 #### 4. 测试生成的 EXE 文件 进入刚才提到过的 `dist/hello` 或者类似命名的位置找到刚刚制作好的 .exe 文件,双击打开确认其正常运作即可验证整个过程是否成功完成。 #### 注意事项 - **环境兼容性**:如果你打算让你的应用能在不同版本的操作系统上都能顺利启动,请尽量选择较低的基础镜像进行封装; - **隐式导入检测**:某些特殊场景比如动态加载模块时可能会导致 PyInstaller 默认找不到全部必要资源,这时可能需要用到 `--hidden-import` 参数手动补充列表; - **钩子(Hooks)**: 对特定框架或大型库的支持通常也由社区贡献者维护着对应规则集(hook),这些 hooks 决定了哪些额外的数据应当被打包进来,确保完整性和功能性不受影响。 通过以上步骤就可以轻松地把 Python 脚本转化为适合分发给非技术人员使用的桌面应用程序啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宗而研之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值