返回顶部
首页 > 资讯 > 后端开发 > Python >pyinstaller使用大全
  • 755
分享到

pyinstaller使用大全

pyinstaller使用pyinstaller使用大全 2023-02-15 12:02:43 755人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录背景1. pyinstaller的安装2. pyinstaller工作原理3. pyinstaller打包成exe3.1 最简单(单个文件):3.3 spec文件解析3.4 打包

背景

python工程完成开发以后需要编译成可执行文件,如此一来生产环境和开发环境隔离开来便于用户使用(可独立使用,无需配置python开发环境),pyinstaller可以方便地将脚本编译成exe

1. pyinstaller的安装

pip install pyinstaller

2. pyinstaller工作原理

  • 先生成一个spec文件(手动或自动均可),该文件决定了实际编译规则
  • 再自动生成一个build文件夹,所有自动编译的中间产物都放在其中
  • 最后生成dist文件夹,存放编译输出

3. pyinstaller打包成exe

3.1 最简单(单个文件):

pyinstaller xxx.py

一般搞法(多文件)

  • 先自动生成spec文件: pyi-makespec xxx.py
  • 再根据自己的实际需求手动修改spec文件
  • 最后统一installer: pyinstaller xxx.spec

F 生成一个单一可执行文件【常用】

w 禁止弹出控制台【常用】

i 修改exe生成的图标【常用】

h 打印帮助信息

v 打印版本信息

d 生成带各种依赖的文件夹,包含exe,dll,以及其他文件

p 指定搜索路径

3.3 spec文件解析

Analysis: 
    ['Console.py','xxx.py'...] <- 此处列出的脚本生成exe后会按顺序依次执行!
    pathex <- 此处为搜索路径
    binaries <- 非Python的库文件
    datas <- ini文件,字体,图片,icon什么的
    pure <- python模块
PYZ: <- 不用管
EXE: <- 输出配置
COLLECT: <- 不用管

3.4 打包dll

在生成的spec文件中修改datas字段,形如:

3.5 利用upx压缩exe

UPX下载地址

运行命令: pyinstaller xxx.spec --upx [输出路径]

4. 常见问题

4.1 打包后的文件太大了

方法1 —— 虚拟环境下打包

造成打包文件太大的主要原因是打包了太多不必要的库,比如安装了anaconda。或者自己pip install了太多库。显然要想解决该问题核心就是不要打包那么多的库。

最好的办法是:在一个虚拟环境中单独打包,只打包该程序执行所必备的依赖库

具体操作方法是:

  • 先安装 pipenv工具,在该工具的帮助下创建虚拟环境单独打包

pip install pipenv

  • 进入虚拟环境:

pipenv shell

  • 尝试运行一下应用程序,缺什么包就单独pip install安装什么包

python xxx.py

  • 当前面的应用程序都可以用的时候再安装pyinstaller,然后进行打包即可

pip install pyinstaller ,pyinstaller -Fw xxx.py

  • 退出虚拟环境

exit

关于pipenv更详细使用请参阅

方法2 —— 排除不相干的包

在*.spec的excludes栏目中添加对应的, 常见: excludes=['matplotlib', 'pandas', 'scipy'],

也可以通过命令行排除: pyinstaller.exe --exclude xxx_package yyy.py

4.2 明明python xxx.py能正常使用, 而打包成exe却无法使用了

主要有以下几种现象:

  • 编译后的exe在打包的机器上运行良好,放到别人机器上不能用了。
  • python xxx.py能正常使用, 而打包成exe却无法使用了。

目前所知主要是两个方面的原因:

  • 路径问题。
  • 依赖包的问题。

python脚本执行的默认路径和exe打包后的路径是不一样的,如果软件中存在文件读取等操作,很有可能导致exe找不到资源而运行出错。

解决该问题的方法是路径冻结

#frozen_dir.py
import os,sys
def app_path():
    if hasattr(sys, 'frozen'):
        return os.path.dirname(sys.executable)
    return os.path.dirname(__file__)

添加frozen_dir.py后,app_path会生成一个绝对准确的基地址,所有的路径以此为基准,如下所示:

import frozen_dir
SETUP_DIR = frozen_dir.app_path()

依赖包的问题往往出现在:在一开始就pyinstaller打包过程序,后续开发时又安装了新模块,如此一来python xxx.py可以正常执行脚本,但是运行xxx.exe报错。

错误根源可能是:pyinstaller是不会更新__pycache__文件夹的,所以后面增加的模块它不知道,也不会打包进去的:

解决方法非常简单:把打包中生成的资源全部删除【__ pycache __, build, dist】,然后重新打包即可

4.3 打包后exe执行速度太慢了啊

解决方法1:精简代码,删除不必要的内容

解决方法2: 用-D -w 打包,缺点是文件太多

pyinstaller -D -w -i icon.ico XX.py

FAQ A: -F打包成的exe可以用,带上-w参数去掉console框就不能用了

Q:暂未解决(跟源码中需要获取cmd执行输出有关)

A:-i增加自定义icon功能后,目录下不含icon资源exe执行异常

Q:暂未解决

A: No module named pkg_resources

Q: 有可能是setuptools版本太高所致(请参考文末扩展知识),pip install setuptools==44.0.0 即可

A:failed to execute pyi_rth_pkgres

Q: 有可能是pyinstaller的版本问题,卸载重新安装一下,参考:

扩展:

Pyinstaller No module named pkg_resources.py2_warn

我通过降低setuptools版本到 44.0.0 后成功解决问题。

pip install  setuptools==44.0.0 

参考链接

pyinstaller踩坑指南

pyinstaller使用详细教程

pyinstaller官网手册

spec修改示例

py,pyc,pyo,pyd的讲解,不同需求不同打包策略

Pyinstaller打包附带DLL、图标和压缩EXE方法

到此这篇关于pyinstaller使用大全的文章就介绍到这了,更多相关pyinstaller使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: pyinstaller使用大全

本文链接: https://lsjlt.com/news/196180.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • pyinstaller使用大全
    目录背景1. pyinstaller的安装2. pyinstaller工作原理3. pyinstaller打包成exe3.1 最简单(单个文件):3.3 spec文件解析3.4 打包...
    99+
    2023-02-15
    pyinstaller使用 pyinstaller使用大全
  • 使用PyInstaller把Python
    1、下载地址:http://www.pyinstaller.org/ 。2、解压即用(V2.1)。注意环境变量,或者用pyinstaller.py的全路径,或者到解压目录下使用。*^_^*3、打包命令示例:python pyinstalle...
    99+
    2023-01-31
    PyInstaller Python
  • 使用Pyinstaller打包的文件太大如何解决
    本篇文章为大家展示了使用Pyinstaller打包的文件太大如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。原因:在Anaconda下打包的很多不必要的模块进去,导致最终的exe文件过于庞大。...
    99+
    2023-06-08
  • python的pyinstaller怎么使用
    首先安装pyinstaller,可以通过pip进行安装: pip install pyinstaller 在命令行中进入你...
    99+
    2024-04-02
  • 如何使用pyinstaller打包Python
    小编给大家分享一下如何使用pyinstaller打包Python,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、单个文件打包1.1 简单打包例如现在有一个mai...
    99+
    2023-06-15
  • 【Python】pyinstaller完整使用教程
      python代码想要像C语言一样编译得到exe文件可能要稍微麻烦一点,不过也还好,python中有一个第三方包pyinstaller可以较为方便地将py文件转换成exe文件。使用时直接在控制台输入...
    99+
    2023-09-18
    python pyinstaller dll 打包
  • 【Python】pyinstaller的介绍与使用
    一、 概述 1、 简介 pyinstaller是一个第三方库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可...
    99+
    2023-09-01
    python
  • Java 反射使用大全
    前言 好多年前自己记的关于Java反射的笔记,这么些年下来,自己用到反射的时候就看这一份就够了。 但是笔记以文件形式存放不方便,所以将其放到CSDN中,也希望能给更多小伙伴带来帮助。 Class类 J...
    99+
    2023-09-26
    java android javaEE 反射 reflect
  • windows7使用技巧大全
    1. PC Safeguard 电脑守卫     我很少让其他人使用我的电脑,因为我怕他们会把它弄的乱七八糟的,但是看起来,微软已经替我考虑到这一点并且顺便解决了这个问题。PC Safegu...
    99+
    2023-05-26
    windows7使用技巧 使用 大全 windows7
  • 使用PyInstaller 打包配置文件
    目录PyInstaller打包配置文件(一) 仅打包python文件(二) 打包python文件与资源文件pyinstaller打包后,配置文件无法正常读取问题P...
    99+
    2024-04-02
  • 使用pyinstaller打包python PyQt5程序
    目录准备工具准备源代码准备打包参数说明针对PyQt应用的改进目前的小问题解决办法再次打包代码仓库说明当你有打包你的python应用的需求以后,你可能会像搜索引擎寻求帮助,你或许曾经搜...
    99+
    2024-04-02
  • 使用pyinstaller打包多个py文
    1. 安装pyinstaller。 pip install pyinstaller  !!!!64位win7上打包后始终不能用,提示找不到ldap模块,换了32位win7就好了。!!!!(代码中涉及ldap模块) 2. pyinsta...
    99+
    2023-01-31
    多个 pyinstaller py
  • linux Dig命令使用大全
    Dig简介: Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具。由于一直缺失Dig man page文档,本文就权当一个dig使用向导吧。 Dig的源码是ISC BIND大...
    99+
    2022-06-04
    linux Dig命令
  • Android 中 Fragment的使用大全
     Fragment必须总是被嵌入到一个Activity中,并且它的生命周期直接受宿主Activity生命周期的影响。 本文内容可以分为下面的几部分: 使用支持库 创建...
    99+
    2022-06-06
    fragment Android
  • PLSQL Developer软件使用大全
    PLSQL Developer软件使用大全    第二章 PLSQL Developer配置 2.1   记住密码 &n...
    99+
    2024-04-02
  • android Chronometer控件使用大全
    目录1、序言2、使用3、发起倒计时4、自定义格式化1、序言 Chronometer 是android 官方提供的计时器、可实现正/倒计时、格式固定:00:00:00; 2、使用 如图...
    99+
    2024-04-02
  • 教你使用pyinstaller打包Python教程
    目录一、单个文件打包1.1 简单打包1.2 带图标打包二、项目多文件打包三、打包后文件太大一、单个文件打包 1.1 简单打包 例如现在有一个main.py文件内容如下 impor...
    99+
    2024-04-02
  • 如何使用PyInstaller打包Python程序
    本篇文章为大家展示了如何使用PyInstaller打包Python程序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。使用PyInstaller打包Python程序PyInstaller介绍:&nbs...
    99+
    2023-06-02
  • 齐全且实用的MySQL函数使用大全
    目录 一、MySQL函数介绍 二、MySQL函数分类 (一)单行函数 ①字符串函数 ②数学函数 ③日期函数 ④流程控制函数 ⑤系统信息函数 ⑥其他函数 (二)聚合函数 三、函数使用示例 (一)字符函数 ①length(str)函数 ②con...
    99+
    2023-08-31
    mysql 数据库 database 数据库架构
  • Python 隐形大变身:PyInstaller 的黑魔法
    Python 凭借其广泛的库和易于使用的语法,已成为最受开发人员欢迎的编程语言之一。然而,当需要将 Python 应用程序部署为独立的可执行文件时,事情可能会变得复杂。这就是 PyInstaller 发挥作用的地方,它是 Python ...
    99+
    2024-02-15
    Python PyInstaller 打包 可执行文件 GUI
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作