python 打包项目(包含.ui文件,.dll文件)为exe可执行文件

目录

1. 背景

2. 生成.spec文件:

3. 编辑.spec文件:

4. 最后生成单个可执行文件.exe:

 5 补充:


1. 背景

        最近在项目中想做一个用于烧录MCU的上位机给工厂用。于是在某工程模板上简单开发了一个基于python 和pyQt5的上位机软件。项目包含多个.py文件,多个.dll文件,一个.ui文件,一个.ico文件。开发完成后,想要打包成一个单独的可执行文件(.exe)并使用项目中的.ico文件作为程序的图标,这样美观,且便于文件的分享,免除安装和依赖环境的麻烦。

这里提供一个在线生成.ico文件的网站:

.ico文件在线生成icon-default.png?t=N658https://www.moqu8.com/mqweb/imgtoico/index.php

2. 生成.spec文件:

        当前有以下一个项目,如图:

        项目中包含多个文件。其中的.py文件,两个.dll文件,一个.ico文件是我们执行时所需要的所有文件。

我们通过vscode 打开该项目文件夹,首先通过以下命令安装pyinstaller:

pip install pyinstaller

然后在terminal中输入以下命令,生成一个用于生成可执行文件的.spec文件(该方法适用于多文件的打包):

pyinstaller -F main.py

-F: 生成一个可执行文件。

main.py :项目的主界面。

此时可以看到,我们生成了一个名为 main.spec的文件。

3. 编辑.spec文件:

        我们打开.spec文件,进行如下编辑:

         3.1 在1位置,将所有需要打包的.py文件,以 'xxx.py' 的格式,添加到包含了 'main.py'的方括号中。

        3.2 将项目根目录的绝对路径,以 '' 包含后,添加到pathex中,注意要用 '\\'.

        3.3 将所有除了.py以外,需要用到各种格式的其他文件,比如 .dll, .ico . jpg等,以2元元组的格式,添加到datas中。元组格式为:('文件相对路径', '文件的父级相对路径')。文件的相对路径可通过以下方式快速获取:

         因为该项目中所有文件均在同一目录下,因此其父级相对路径变为 '.\\'。注意,这里也需要用 '\\'。

        3.4 修改name为你需要的命名。

        3.5 console有两种情况: True: 运行程序时打开命令窗口;False:不打开命令窗口。

        3.6 默认生成的.spec中可能不带icon,如果需要更改新程序图标的话,需要加上这行。因为当前图标和main.py在同一目录下,所以可直接用其相对路径。

4. 最后生成单个可执行文件.exe:

        在terminal中输入以下命令:

pyinstaller main.spec

        基于我们刚编辑过的.spec文件,我们最终在项目的根目录下生成两个文件夹: dist; build。我们需要的.exe文件就在dist文件夹下。

        图中可以看到,可执行文件的图标也变为了factory.ico。并且最后只生成了一个可执行文件。

运行一下:

 5 补充:

其实在最开始生成.spec文件时,可用下面的命令:

pyinstaller -F -w -i factory.ico main.py

下面是pyinstaller 的参数信息:

-h该模块的help信息
-F生成一个可执行文件
-D生成一个目录(包含多个文件)作为可执行文件
-w运行exe时,不显示命令行窗口(仅对Windows有效)
-i该参数后跟可执行文件的icon图标路径
–distpath该参数后跟可执行文件的路径
-n该参数后跟可执行文件的新名字

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python 打包成 .exe 文件后出现闪退的问题可能有多个原因,以下是一些常见的可能原因和解决方法: 1. 依赖问题:Python 程序可能依赖于某些第三方库或模块,但是在打包过程中没有将这些依赖项包含在内。解决方法是确保在打包时将所有需要的依赖项都正确地包含进去。 2. 缺少关键文件:在打包过程中,可能会遗漏一些关键文件,例如配置文件、模板文件等。这些文件在程序运行时是必需的,如果缺少这些文件,程序就会出现问题。确保将所有必需的文件都正确地包含打包后的 .exe 文件中。 3. 异常处理:如果程序中存在未处理的异常,当出现异常时,程序就有可能闪退。在打包前确保程序中已经适当地处理了异常,并提供了错误提示或日志输出。 4. 兼容性问题:某些第三方库可能不完全兼容打包工具,导致程序在打包后无法正常运行。尝试使用更适合的打包工具或调整代码以解决兼容性问题。 5. 编码问题:Python 2.x 和 Python 3.x 之间存在一些不兼容的编码差异,如果程序中使用了不兼容的编码方式,可能导致打包后的程序闪退。确保代码在打包前已经正确地转换为适用于目标 Python 版本的编码方式。 以上是一些可能导致 Python 打包后的 .exe 文件闪退的常见原因和解决方法。具体问题可能需要根据你的代码和打包环境进行进一步的调试和排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嘉禾天成

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

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

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

打赏作者

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

抵扣说明:

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

余额充值