Python打包exe文件

简介: Python打包exe文件

1 下载安装pyinstaller

pip install pyinstaller

2 使用pyinstaller打包生成exe文件

2.1 预打包:打包带控制台的exe文件,便于纠错

  1. 创建带控制台的exe文件
    pyinstaller [main.py]
    
  2. 使用该命令,就会在当前路径下生成一个名dist的目录
  3. 进入该目录,有一个和主程序同名的目录
  4. 进入目录,找到同名的[main].exe文件,该文件即为打包生成的exe文件,同目录下其他文件则为相关的链接文件
  5. pyinstaller打包时,只会动态链接相关的py文件中的库或py文件,不会导入静态资源文件,当项目在运行时需要依赖一些静态资源时,需要手动将这些文件复制在dist目录下的同名目录下
  6. 打包时,有一些依赖无法直接导入,所以需要使用--hidden-import参数隐式导入无法导入的库
  7. 运行exe文件,查看控制台输出:
  8. 若控制台输出:NO Mould Named XXX,则说明XXX包不存在或不兼容,重新下载该包
  9. 若控制台输出ImportError,则说明该包为动态导入的包,需要使用 --hidden-import参数隐式导入
    pyinstaller [main.py] --hidden-import "隐式导入的包名"
    

    2.2 正式打包

    使用带控制台方式打包exe文件,纠正完打包中可能存在的异常情况后,即可正式将项目打包为正式exe文件,使用 --noconsole 参数生成不带控制台的exe文件
    pyinstaller [main.py] --noconsole --hidden-import "隐式导入的包名"
    

    3 pyinstaller相关参数说明

    | 参数 | 说明 |
    | --- | --- |
    | -F,-onefile | 打包时将项目打包为单个可执行文件,打包后的文件相对较小 |
    | -D,--onedir(默认) | 产生一个目录作为可执行文件,打包后的文件相对较大 |
    | w,--windowed,--noconsolc | 指定程序运行时不显示命令行窗口(仅对 Windows 有效) |
    | -c,--nowindowed,--console(默认) | 指定使用命令行窗口运行程序(仅对 Windows 有效) |
    | --icon | 设置打包后的exe文件的icon图标,只支持ico文件,若为png,jpg等文件,可使用相关在线工具将格式转换为ico文件再打包 |
    | --hidden-import | 隐式导入无法导入的包 |

注:在打包时,不建议使用**-F**参数,使用**-F**打包后的单个exe文件,虽然文件较小,但是启动较慢,并且**-F**文件无法很好的处理静态资源

4 优化打包后的目录结构,将库文件放入lib文件夹中

将exe文件打包为目录结构的话,exe同级文件夹下会有很多的库文件夹和dll文件,此时会造成两个问题:

  1. 无法很快的定位到exe文件
  2. 目录结构混乱

为解决此问题,优化目录结构,可以将相关的依赖放在指定文件夹中,可执行文件放在外部,如,在外部创建可执行文件的快捷方式,将可执行程序的目录命名为lib即可完成此操作。此方法在免安装环境下,即将程序提供给他人时使用压缩包的方式可有效实行,方便快捷。

但是在将程序打包为可安装软件时,此方法无法正常执行,快捷方式在作为主程序时会自动执行为exe可执行文件,打包安装软件时,会自动将快捷方式重定向到可执行exe文件,导致安装软件后,安装目录下有两个可执行文件,一个为lib目录下的可执行文件的exe文件,一个为快捷方式,运行可执行的exe文件时,因为可执行文件实际的运行路径为lib目录下,而生成的可执行文件为在安装目录下,所以运行改可执行exe文件会报错,运行快捷方式可正常运行。

打包安装文件时,使用快捷方式作为主程序文件:

  1. 安装后会生成lib路径下可执行文件的副本,但是因为路径问题,此副本无法运行,若在安装时生成桌面快捷方式,则桌面快捷方式指向此副本,同样无法执行
  2. 安装目录下会包含快捷方式,使用快捷方式可正常运行

若将这样的安装包提供给他人使用时,则这样的安装包会造成一些额外影响,所以在打包安装包时,不易使用快捷方式作为主程序。

使用快捷方式执行主程序,本质上是将程序重定向到lib路径下的可执行程序,既然在打包安装包时,不能使用快捷方式,那么转变思维,使用其他方法,打开lib路径下的可执行程序即可。如:写一个脚本,打开lib下的可执行程序,该脚本虽然在启动可执行程序的原理上与快捷方式不同,但是在效果上,都完成的是一件事情:打开lib路径下的可执行程序。

在这里,我使用的golang写了一个打开指定文件的程序,然后生成可执行文件,替换原快捷方式。
Windows下使用GoLang调用exe文件:

package main

import (
    "os/exec"
)

func main()  {
   
    file_parent_path := "./lib/"
    file_name := "application.exe"

    file_path := file_parent_path + file_name
    cmd := exec.Command("cmd", "/c", "start ", file_path)
    cmd.Run()
}

该方法的核心思想是生成一个可打开指定程序的程序,不必拘泥于脚本的形式,根据项目需求和条件,快速写一个脚本或程序即可达到指定需求,这里的golang调用exe文件只是一个例子。

相关文章
|
1月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
16天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
17 2
|
1月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
1月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
1月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
44 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
1月前
|
XML JSON Ubuntu
Python实用记录(十五):PyQt/PySide6打包成exe,精简版(nuitka/pyinstaller/auto-py-to-exe)
本文介绍了使用Nuitka、PyInstaller和auto-py-to-exe三种工具将Python的PyQt/PySide6应用打包成exe文件的方法。提供了详细的安装步骤、打包命令和参数说明,适合新手学习和实践。
328 0
|
8天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
8天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
8天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
下一篇
无影云桌面