Python代码打包成exe应用

目录

一、前期准备

二、Pyinstaller打包步骤

Pyinstaller参数详解

三、测试

[Spec 文件相关命令](#Spec 文件相关命令)


一、前期准备

(1)首先,我们需要确保你的代码可以在本地电脑上的pycharm正常运行成功。

(2)我们要先安装Pyinstaller,如果网速太慢可以切换国内源来加速,本文其他部分直接使用国内源,不再重复注释。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller 

二、Pyinstaller打包步骤

(1)打开pycharm,在D:\my\else\project_qxj\pythonProject1路径下新建一个项目文件夹,

这里我拿之前我的一个Python代码(code文件夹)作为案例来演示,这个文件夹里包含脚本main.py,音频文件buzzer_sound.wav等等。

把code文件夹放到这个项目下面,目录结构如下所示:

(2)将准备好的软件图标图片logo.ico放在了我电脑的D:\my\else\project_qxj\code目录下。

(3)使用pyinstaller打包Python代码非常简单,只需要在命令行中输入以下命令:

pyinstaller -F -w -i D:\my\else\project_qxj\code\logo.ico main.py --hidden-import gui.py --hidden-import config.py --hidden-import monitor_utils.py

Pyinstaller参数详解

PyInstaller 是一个用于将 Python 应用程序打包成独立可执行文件的工具。它可以将 Python 脚本及其所有依赖项打包到一个可执行文件中,使得在没有安装 Python 解释器的机器上也能运行该应用程序。下面是 PyInstaller 常用参数的详细解释:

  • -F, --onefile:生成单个可执行文件。
  • -w是指程序启动的时候不会打开命令行。如果不加-w的参数,就会有黑洞洞的控制台窗口出来。比如在刚才的脚本里我加一行print('Hello World!'),那么就不要放-w参数了,不然运行会报错,毕竟Hello World!需要在命令行里打印出来。此外,-w参数在GUI界面时非常有用。
  • -i xxx.ico:设置自己的图标图案

以上三个是比较常用的参数,其他参数详见下表

执行过程如下图所示:

可以看到打包成功了。而且执行完毕会发现当前目录多了几个文件夹,打开其中名为dist的文件夹,dist文件夹下将生成一个可执行exe文件,可以在Windows、Linux和MacOS上运行,并且图标也是我们设置的logo图案,看来已经成功一半了。。

三、测试

(4)接下来,我们就可以运行一下在dist文件夹下面已经生成的这个名为main的exe应用程序了。但是双击打开exe执行的时候,报错了,这说明我打包的程序是有问题的

(5)分析之后,发现好像是没在代码中找到我的数据文件。

打开生成的main.spec文件,这里需要再做一个操作,这样才能使得WAV文件被打包到exe中,运行时也可以正确找到和播放。

  • 需要把用到的数据文件,比如我的代码里用到了这个音频文件buzzer_sound.wav,就需要添加到datas里。

  • hiddenimportsspec 文件中的一个重要选项,用于指定 PyInstaller 在打包时需要包含的额外模块,这些模块是 PyInstaller 在静态分析过程中无法自动检测到的。

    • 通常情况下,PyInstaller 通过静态分析 Python 代码,找出所有导入的模块并将它们包括在打包的应用程序中。然而,有时导入是动态的,例如使用 __import__importlib 或其他动态导入方法,这些情况下 PyInstaller 可能无法自动检测到这些模块。这时,就需要手动指定这些模块,将它们添加到 hiddenimports 列表中。

Spec 文件相关命令

在使用 PyInstaller 打包 Python 应用程序时,spec 文件(specification file)用来定义打包过程的配置。

PyInstaller 使用一个规格文件(spec 文件)来控制构建过程。通过修改 spec 文件,你可以精确地控制打包过程中的各种选项和行为。

生成 spec 文件:

pyinstaller --onefile myscript.py --specpath

生成的 spec 文件可以进行手动编辑,然后使用以下命令重新生成可执行文件:

pyinstaller myscript.spec

如果你打包产生的spec文件里的hiddenimports内已经包含了你代码中需要的数据文件,那就不需要进行修改了。如果没有包含,则进行如下图所示的修改:

(6)然后执行下列命令,使用我们修改好的spec文件进行再次打包。

pyinstaller main.spec

双击运行exe文件,

OK,程序正常运行起来了。

相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou2 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书2 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
----云烟----4 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024064 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·4 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic4 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it4 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康5 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神5 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式