一文带你搞定python脚本(.py)打包为可执行文件(.exe)

文章目录

      • 01、为什么要打包Python脚本?
      • 02、打包步骤?
        • 第一步:环境配置与操作包安装
        • 第二步:开始打包
        • 第三步:输入打包命令
        • ICO图片生成
        • 示例:
        • 总结:
      • 03、多个.py文件打包
        • import 和 from ... import *用法区别
        • 解决方法(!!!打包可执行文件时报错找不到模块)

01、为什么要打包Python脚本?

​ Python脚本打包的主要目的是为了方便程序的分发和部署。通过打包,可以将所有必要的文件、依赖项和配置打包到一个可执行的文件或者安装包中,这样用户就不需要手动安装各种依赖库,只需运行打包后的程序即可。另外,打包也可以保护源代码,避免源代码被篡改或者泄露。这在商业软件或者需要保护知识产权的情况下尤为重要。同时,打包还能够简化程序的部署流程,减少用户可能遇到的配置问题,提高软件的易用性和稳定性。

​ 总的来说,Python脚本打包可以提高程序的可移植性安全性用户体验

02、打包步骤?

第一步:环境配置与操作包安装

方式一:打开cmd,进入到Python工程项目目录下输入如下命令

方式二:直接在PyCharm终端环境下输入如下命令

pip install pyinstaller

在这里插入图片描述

运行命令后,显示:Successfully inatslled pyinstaller—3.6即安装成功

第二步:开始打包
  • 单个.py文件打包

    进入cmd窗口后,使用cd命令进入到该文件所在文件夹下,如下图:

在这里插入图片描述

项目文件夹在E盘,需要先将cmd的当前目录改为D盘(命令为: D:)再用cd命令更改路径。

在这里插入图片描述

第三步:输入打包命令
pyinstaller -F -w (-i icofile) 文件名.py

解释一下上述命令的参数:

  1. -w 表示在打包好程序后,双击.exe文件不会出现黑色的命令窗口。(如果你的程序有print等输出命令,就会有黑洞洞的控制台窗口出来,输出的内容就在此命令窗口中显示)
  2. 括号中的内容是可以省略的,-i 表示给.exe文件一个图标,icofile表示图标的文件名,图标的图片格式为.ico格式的。不懂.ico图片的可以百度一下,打包时如果需要给.exe加入图标,将图标文件放到和.py文件同一目录下即可。
  3. 文件名.py 这里的文件名是你要打包的.py文件的名称,例如上述例子为“樱花.py”
ICO图片生成

如果想给自己做的软件放上期望的图标,如何找到喜欢的ico图片呢?

  • 一是找专门的ico图片网站,不过都很小众,图片库也很小。
  • 另一个是可以自己制作,这里就给大家分享一个网站,可以把其他格式图片转成ico格式:

https://app.xunjiepdf.com/img2icon/

示例:

在这里插入图片描述

我要打包的文件是樱花.py,需要导入的图标是樱花.ico文件,具体操作如下:

在这里插入图片描述

运行结果如下:

在这里插入图片描述

总结:

Pyinstaller -F py_word.py 打包exe

Pyinstaller -F -w py_word.py 不带控制台的打包

Pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe图标打包

03、多个.py文件打包

有时候我们会利用Python开发一个包含GUI界面的小工具、小程序等等,这样的文件就不是一个简单的.py文件,如此一来想要打包包含多个.py文件的文件夹该如何操作呢?

​ 思路很简单,“擒贼先擒王‘,你直接在该文件夹路径下使用打包命令打包主文件,然后将主文件调用的模块函数、插件、图片资料以及配置文件等复制到打包后的文件夹即可。

!!!但是这样打包的文件有时候会面临一个问题,双击运行可执行文件时报错找不到对应的模块,这样导致程序无法正常启动,即使代码没有问题,这样的问题该怎么解决呢?先来看两种函数调用方法的区别:

import 和 from … import *用法区别

在Python中,importfrom ... import * 是用来引入模块中的内容的两种不同方式。

  1. import 模块名:这种方式会将整个模块引入当前命名空间,你可以通过模块名来访问模块中的内容。例如:

    import math
    print(math.pi)
    
  2. from 模块名 import *:这种方式会将指定模块中的所有公开内容导入当前命名空间,你可以直接访问这些内容,而无需使用模块名作为前缀。例如:

    from math import *
    print(pi)
    

使用 import 的优点是可以清晰地看出引入的内容来自哪个模块,不容易造成命名冲突;而使用 from ... import * 的优点是可以直接访问模块中的内容,不需要使用模块名作为前缀,方便简洁。但是,在实际开发中,不推荐频繁使用 from ... import *,因为这样可能会导致命名冲突或者代码可读性下降。

总结来说,import会导入调用函数的整个模块,包括他自身调用的库函数;相反,如果使from方式调用,调用函数所导入的库函数会存在找不到模块的情况。因此,对于程序较为简单的建议使用from函数,如果程序相对复杂,不建议使用from方式进行调用。

解决方法(!!!打包可执行文件时报错找不到模块)

当使用PyInstaller打包Python程序时,有时会遇到打包后无法找到自定义模块的情况。这通常是由于PyInstaller默认只会打包程序所依赖的标准库和第三方库,而对于自定义模块需要进行额外的配置。

解决这个问题的方法有两种:

  1. 使用--hidden-import参数手动添加模块依赖:
    在使用PyInstaller打包时,可以通过--hidden-import参数手动添加需要打包的自定义模块。例如,如果你的程序依赖了一个名为my_module的自定义模块,可以使用以下命令进行打包:

    pyinstaller --hidden-import my_module your_script.py
    

    这样PyInstaller会将my_module一同打包进可执行文件中,使得运行时可以找到该模块。

  2. 使用--add-data参数指定模块的路径:
    如果你的自定义模块不在Python的标准库或第三方库中,而是位于其他目录下,可以使用--add-data参数指定模块的路径。例如,假设你的自定义模块位于/path/to/my_module.py,可以使用以下命令进行打包:

    pyinstaller --add-data "/path/to/my_module.py:." your_script.py
    

模块位于/path/to/my_module.py,可以使用以下命令进行打包:

pyinstaller --add-data "/path/to/my_module.py:." your_script.py

这样PyInstaller会将my_module.py复制到可执行文件所在的目录,并在运行时能够找到该模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/529589.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发学习入门教程之环境配置

最近鸿蒙开发越来越火,各个大厂都有鸿蒙版本的计划和宣传,看这个趋势,可能会在几年内发展壮大,为我们移动端码农开辟一片新的职场。所以现在开始学起来还是很有必要的。今天就一起开始配置环境搞起来吧。 首先,找到官…

当金蝶遇上BI,马上就能看到数据可视化效果

最近整理咨询内容时发现,很多企业用户在咨询时都会问是否有行业案例,究其原因时他们没用过BI数据分析,不知道BI可以做什么,能做到什么地步。其实,要知道这些东西还不简单,只需要注册奥威BI软件,…

Window10数据库崩溃启动失败,MySQL8.0.30通过data文件夹恢复数据库到Docker

背景: 昨天关机前还在使用mysql,一切正常,但今天打开电脑,发现mysql启动不起来了,老是提示端口占用,但是系统也没有新安装什么软件,而且通过查询nat命令也没发现3306端口占用。而且修改成3307等…

基于SpringBoot的农产品特色供销系统(蔬菜商城)

基于SpringBoot的农产品特色供销系统(蔬菜商城) 系统介绍 该系统使用Java、MySQL、Redis、Spring Boot和HTML等技术作为系统的技术支撑,实现了以下功能模块: (1)后台管理模块,包括权限、日志、…

11---数字温度 OR 湿度传感器电路设计

视频链接 数字温度or湿度传感器电路设计02_哔哩哔哩_bilibili 数字温度 OR 湿度传感器电路设计 1、温湿度传感器 DHT11 DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度-5%RH, 温度-2℃,量程湿度20-90%RH, 温度0~50℃。 D…

巫蛊之祸——汉武帝后期的一次重大事件

引 言 “巫蛊之祸”是汉武帝在位后期发生的一次重大政治事件,也是西汉历史上最大的冤案,此案导致皇后卫子夫和太子刘据自杀,数万人头落地,几十万人被牵连。 一、巫蛊之术的由来 《汉书》记载,巫蛊之术起源自胡巫&am…

智慧水务大数据,信息化云平台建设,综合运营管理平台

一、水务信息化的建设方向 1、完善基础设施构建软件定义的数据中心 基础设施,建设新一代软件定义的数据中心;逐步整合水务和海洋资源、统一、规范化各业务系统,按照一体化、一站式的服务进行建设。 2、整合信息资源建立智慧决策体系 统一信息采集方式,…

Mybatis的使用快速入门

1. 数据库准备 假设目前存在以下数据库表。 CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );2. 依赖导入 pom.xml <dependencies><!-- mybatis依赖 --><dependency><groupId>or…

windows下pytorch的dataloader多进程(num_workers)问题,为何num_workers的值只能为0?

问题背景介绍 本人是windows系统&#xff0c;在使用torch.utils.data.Dataloader加载torchvision中的数据集时&#xff0c;将其中的形参num_workers设置为了大于0的数&#xff0c;然后出现以下错误。 原因 在 Windows 系统下&#xff0c;num_workers 参数在使用 PyTorch 的 t…

CleanMyMac X4.15具有哪些功能和特点?

CleanMyMac X具有许多其他功能和特点&#xff0c;以下是一些主要亮点&#xff1a; 系统清理&#xff1a;它能够深入扫描macOS系统&#xff0c;识别并清除各种垃圾文件&#xff0c;如缓存、日志、无用的语言文件等。这不仅有助于释放硬盘空间&#xff0c;还可以提高系统的整体性…

Aigtek电压放大器设计流程是什么样的

电压放大器是电子电路中常见的一种模块&#xff0c;用于放大输入信号的电压幅值。在实际设计过程中&#xff0c;需要考虑多个因素&#xff0c;包括放大器的增益、带宽、稳定性和功耗等。下面将介绍电压放大器设计的一般流程。 确定需求&#xff1a;首先需要明确设计的目标和需求…

如何提高内存和cpu使用率呢?-Linux类资源

最近公司项目上线时&#xff0c;红蓝线巡检时&#xff0c;部分服务器因配置高但使用率低而需要降级。 为了避免降级&#xff0c;如何增加内存和CPU使用率&#xff1f; 这可以通过脚本来实现。 当前服务器操作系统版本&#xff1a;-7_5。 连接服务器后&#xff0c;登录账号。 …