目录
一、前期准备
(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里。
-
hiddenimports
是spec
文件中的一个重要选项,用于指定 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,程序正常运行起来了。