当前位置: 首页 > article >正文

打包python代码为exe文件

文章目录

概要

使用流程

常见问题

概要

主要介绍Pyinstaller的基本使用方法,以及使用Pyinstaller打包py文件为exe的要点有:

1)文件路径

2)命令参数

使用流程

所有操作均在终端中进行。

1)先下载包(下载失败就换源下载)

pip install pyinstaller
pip install pyinstaller -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

2)使用基本命令

pyinstaller -F -w --add-data "SOURCE;DEST" xxx.py

注意:

  • 使用该命令前,必须进入到该py文件的当前目录下

常用参数介绍:

  • -F 表示生成单个可执行文件,最终目录下只有一个exe文件;如果不使用该参数会将其他资源也展现出来
  • -w 表示去掉控制台窗口,在调试过程中可以先不使用方便查看报错
  • -i 表示可执行文件的图标,可以设置打包完成后的图标,
    使用样例:pyinstaller -F -i ./xxx.ico xxx.py
  • --add -data 表示添加资源文件到exe文件中,参数接受 SOURCE:DEST 或SOURCE;DEST 格式,SOURCE 是你本地的资源路径,DEST是打包后资源文件的目标路径。在windows和mac系统下使用";"隔开文件,在 Linux/macOS 上使用 : 作为分隔符。
    想打包多个文件:pyinstaller -F --add-data "SOURCE;DEST"  --add-data "SOURCE1/xxx.txt;DEST1"  xxx.py
    这里可以指定打包SOURCE1文件夹下的特定文件,也可以直接打包SOURCE下的所有文件;目前就我使用情况来看只能添加和py文件在同一级的文件夹。

3)运行之后,会产生两个文件夹和一个文件:build文件夹,dist文件夹(exe文件就在这里),最后一个是.spec文件(可以编辑该文件然后对它进行打包)

使用这种方法可以参考这篇博客。

常见问题

(1)路径问题最难办,因为很有py文件在开发模式下大部分都是采用abspath/realpath的方法获取路径

root_dir = os.path.dirname(os.path.abspath(__file__))

问题原因:

开发模式下,获取的路径为当前py文件工作的路径。

打包为exe文件时,获取的路径则是资源缓存的路径,因为在运行exe文件时,系统会将它解压在C:\Users\86176\AppData\Local\Temp\xxx某临时文件夹下,所以这里最后获取资源的路径会产生错误。

解决方法:

1)使用--add -data,打包资源文件到exe文件中时,可以使用下文的函数,来获取不同情况下的路径。

  • 在开发模式下:你可以通过 os.path 获取资源文件的路径(例如 os.path.join)。
  • .exe 打包后:你需要通过 sys._MEIPASS 来处理资源文件路径。

sys._MEIPASS 是一个由 PyInstaller 设置的特殊属性,它的值是程序运行时创建的临时目录的绝对路径。

def resource_path(relative_path):
    # 判断运行状态是开发模式还是exe打包状态
    if getattr(sys, 'frozen', False):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)
​
folder_path = resource_path('your_folder')

2)不使用--add -data打包资源,而是将资源放在dist文件夹下,可以使用sys.executable:

path = os.path.dirname(os.path.realpath(sys.executable))
具体路径根据需要修改
  • sys.executable 返回当前 Python 解释器的路径(即正在运行的 Python 解释器的可执行文件路径)。
  • 如果是用 pyinstaller 打包后的 .exe 文件,sys.executable 会返回 .exe 文件的路径

(2)打开exe文件如果报错会直接退出程序,如何查看bug

打开cmd,直接将exe文件拖进去,回车运行就可以看到报错了


http://www.kler.cn/a/394438.html

相关文章:

  • idea设置控制台日志输出自动换行
  • 解决 Docker 中 DataLoader 多进程错误:共享内存不足
  • 第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
  • HTTP、HTTPS和SOCKS5代理協議
  • 重温设计模式--职责链模式
  • Promise链式调用
  • Flutter:Widget生命周期
  • Spring MVC进阶
  • R语言基础| 机器学习
  • 改扩配系列:浪潮英政服务器CS5280H2、IR5280H2——后置SATA、NVME硬盘安装
  • SpringBoot实战:AI大模型+亮数据代理高效获取视频资源
  • 【Apache Paimon】-- 1 -- Apache Paimon 是什么?
  • Python Pandas 结构之 Series 和 DataFrame
  • NFS存储基础操作
  • PostgreSQL 行转列实现
  • 存储大挑战:如何在可靠性与大容量之间玩转平衡术?
  • LabVIEW 使用 Snippet
  • 【Excel】数据透视表分析方法大全
  • 【C++进阶实战】基于linux的天气预报系统
  • CTF攻防世界小白刷题自学笔记15
  • 【Golang】golang框架,为什么选择GoFrame, GoFrame使用心得
  • Electron 项目中杀掉进程的不同方式
  • 《FreeRTOS列表和列表项篇》
  • 6.584-Lab1:MapReduce
  • 深入解析 OpenHarmony 构建系统-1
  • 制作图片木马