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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值