Python打包为可执行文件

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

文章目录

  • 一文带你搞定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复制到可执行文件所在的目录,并在运行时能够找到该模块。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车行业一项网络安全标准实践指南发布,SSL证书助力传输通道加密,确保数据安全

2024年3月7日,全国网络安全标准化技术委员会秘书处发布了《网络安全标准实践指南——车外画面局部轮廓化处理效果验证》(以下简称《实践指南》),旨在指导汽车数据处理者对车外画面进行人脸、车牌局部轮廓化处理效果的自行验证。《…

图的链式前向星存储与搜索

图的存储与搜索 链式前向星存储 图的存储方式有很多种,但是也都有各自的优缺点。例如:采用邻接矩阵的形式存储的时候,存储比较简单,但是遍历或者处理的时候就会比较浪费时间;而采用邻接表存储,则效率会有…

无需修改配置springboot启动多个不同端口的启动类

idea:2023 1.4版本 复制原先启动类,原先没有启动类,点击上方➕添加启动类 需要配置不同的端口号,其他默认 点击应用即可

ARM地址映射表

硬件控制原理 只有Load/start指令可以读写硬件控制器量的寄存器,从而操作硬件地址划分图如下(其中IO(SFR)用来操控硬件的):注意:对于一个32位的处理器,里面的所有寄存器都是32位地址,所以范围位2的32次方,…

Tab组件的编写与动态日期的函数封装

src\components\Tab\Icon.vue 底部导航栏子组件。 <template><router-link :to"path" class"tab-icon"><i class"icon">{{iconText}}</i><p class"text"><slot>{{ tabText }}</slot></…

ModuleNotFoundError: No module named ‘sklearn.cross_validation‘

一、问题分析 ModuleNotFoundError: No module named sklearn.cross_validation 英文先翻译一遍&#xff0c;模块未找到问题&#xff0c;这里涉及到sklearn这个模块&#xff0c;Sklearn &#xff08;全称 SciKit-Learn&#xff09;&#xff0c;是基于 Python 语言的机器学习工…

【玩转Linux】有关Linux权限

目录 一.Linux权限的概念 1. 权限的本质 2.Linux中的用户 3.Linux中的权限管理 (1)文件访问者的分类 (2)文件类型和访问权限&#xff08;事物属性&#xff09; ①文件基本权限 ②文件权限值的表示方法 (3)文件访问权限的相关设置方法 ① 用 户 表 示 符 / - 权 …

Android14音频进阶:AudioTrack如何巧妙衔接AudioFlinger(五十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

GAN 网络的损失函数介绍代码

文章目录 GAN的损失函数介绍1.L1 losses2.mse loss3.smooth L14.charbonnier_loss5.perceptual loss (content and style losses)6.Gan损失7.WeightedTVLoss8.完整代码方便使用,含训练epoch代码。 GAN的损失函数介绍 1.L1 losses pixel_opt: type: L1Loss loss_weight: 1.0 r…

如何将视频内容转换为文字文稿?这三款工具助您实现视频转写!

在日常生活中&#xff0c;有时我们需要将视频中的内容转换为文字文稿以便于搜索、编辑或分享。但选择合适的视频转文字软件可能让人感到困惑。今天我将为您推荐三款优秀的视频转文字工具&#xff0c;它们操作简单、准确高效&#xff0c;能够帮助您快速完成视频内容转写的工作。…

C中的流程控制

顺序结构 自上而下逐条执行 选择结构 if if&#xff08;条件&#xff09;{执行语句1}else{执行语句2} if&#xff08;条件&#xff09;{执行语句1}else if{执行语句2}else{执行语句2} switch 根据条件直接跳转到位置处 格式 switch(表达式) { case 目标值1: 执行语句1 break;…

Java:继承

文章目录 每日一言1. 什么是继承&#xff1f;2. 子类怎么访问父类的成员变量&#xff1f;2.1 不同名的怎么访问&#xff1f;2.2 同名的怎么访问&#xff1f; 3. 子类怎么访问父类的成员方法&#xff1f;3.1 不同名的怎么访问&#xff1f;3.2 同名的怎么访问&#xff1f; 4. 如果…

吴恩达deeplearning.ai:决策树模型

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 猫分类例子学习过程 学习算法非常强大的原因之一&#xff0c;是其应用了决策树和树集合&#xff0c;尽管决策树取得了巨大的成功&#xff0c;但是在学术界却没有太多的研究&#x…

【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项

【机器学习】进阶学习&#xff1a;详细解析Sklearn中的MinMaxScaler—原理、应用、源码与注意事项 这篇文章的质量分达到了97分&#xff0c;虽然满分是100分&#xff0c;但已经相当接近完美了。请您耐心阅读&#xff0c;我相信您一定能从中获得不少宝贵的收获和启发~ &#x1f…

如何配置固定TCP公网地址实现远程访问内网MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

用了这些计费方式,代理IP成本减半

“代理IP在现代互联网环境中扮演着重要的角色&#xff0c;它们用于隐藏真实的网络地址&#xff0c;提供更安全和匿名的网络浏览体验。代理IP的成本一直是个令人头疼的问题。” 过去供应商常常采用固定费用的模式&#xff0c;客户无论使用时间长短都需要支付相同的费用&#xff…

[Mac软件]Adobe Illustrator 2024 28.3 intel/M1/M2/M3矢量图制作软件

应用介绍 Adobe Illustrator 是行业标准的矢量图形应用程序&#xff0c;可以为印刷、网络、视频和移动设备创建logos、图标、绘图、排版和插图。数以百万计的设计师和艺术家使用Illustrator CC创作&#xff0c;从网页图标和产品包装到书籍插图和广告牌。 绘制任意大小的标志 拥…

恒丰纸业携手得帆云,构建权威级企业主数据管理平台

本期客户 牡丹江恒丰纸业股份有限公司&#xff08;简称“恒丰纸业”&#xff09;是国内首家通过科技部和中科院认定的造纸行业重点高新技术企业&#xff0c;于2001年上海证交所上市交易。 恒丰纸业拥有70年历史底蕴和特种薄页纸研发制造技术&#xff0c;现有生产线21条&#xf…

白酒:勾兑技艺的科学原理与实践技巧

在白酒的酿造过程中&#xff0c;勾兑技艺是至关重要的一环。通过勾兑&#xff0c;酒庄能够将不同类型、不同年份的基酒进行优化组合&#xff0c;以获得理想的口感和品质。许多酒庄在勾兑技艺方面积累了丰富的实践经验&#xff0c;并不断探索科学原理&#xff0c;以提高勾兑技艺…

前端性能优化 | CDN缓存

前言 CDN&#xff08;Content Delivery Network&#xff09;是一种分布式的网络架构&#xff0c;通过在全球各地部署节点服务器来快速传输和分发网络内容。CDN的主要目标是提供快速、可靠的内容传输&#xff0c;以提升用户体验。 本文主要从以下方面讲解CDN 什么是CDNCDN的作…