使用PyInstaller库把Python程序打包成exe

作者:springsnow 时间:2023-11-27 17:40:28 

一、pyinstaller简介

Python是一个脚本语言,被解释器解释执行。它的发布方式:

  • .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的)

  • .pyc文件:有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是Python解释器可以识别的二进制码,故发布后也是跨平台的,需要使用者安装相应版本的Python和依赖库。

  • 可执行文件:对于非码农用户或者一些小白用户,你让他装个Python同时还要折腾一堆依赖库,那简直是个灾难。对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉Ta即可。比较麻烦的是需要针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,...)。

本文主要就是介绍最后一种方式,.py和.pyc都比较简单,Python本身就可以搞定。将Python脚本打包成可执行文件有多种方式,本文重点介绍PyInstaller。

PyInstaller的原理简介

PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装python和你的脚本依赖的库。在Linux操作系统下,它主要用的binutil工具包里面的lddobjdump命令。

PyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。

需要注意的是,PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。

将.py源代码转换成无需源代码的可执行文件

使用PyInstaller库把Python程序打包成exe

pyInstalller下载网址

使用PyInstaller库把Python程序打包成exe

二、pyinstaller在windows下的安装

使用命令pip install pyinstaller即可

pip install pyinstaller

在windows下,pyinstaller需要PyWin32的支持。当用pip安装pyinstaller时未找到PyWin32,会自动安装pypiwin32。

三、打包

打包的app里并不包含任何源码,但将脚本的.pyc文件打包了。

基本语法:

pyinstaller options myscript.py

常用的可选参数如下:

  • -D, --one-dir打包成一个文件夹,默认

  • -F, --one-file打包成一个exe文件

  • -p DIR, --paths DIR添加路径,一般用来添加程序所用到的包的所在位置

  • -c, --console, --nowindowed提供程序视窗,程序有输入输出的界面,默认

  • -w, --windowed, --noconsole无视窗,程序后台运行

  • -i <FILE.ico or FILE.exe,ID or FILE.icns>, --icon <FILE.ico or FILE.exe,ID or FILE.icns>添加icon图标

pyinstaller --onefile --nowindowed  C:/PycharmProjects/untitled/hello.py

使用PyInstaller库把Python程序打包成exe

就会在当前文件下形成build文件夹、dist文件夹和.spec文件。
dist里就是guess_exe.exe可执行文件。

使用PyInstaller库把Python程序打包成exe

如果有打包错误,具体看build里的warn***.txt文档,里面详细记载了错误的原因。一般都是库丢失。
spec文件告诉PyInstaller如何去处理脚本。它对脚本名以及大多数pyinstaller的可选参数进行加密。PyInstaller就是通过执行spec文件的内容来build the app。

四、pyinstaller常见错误

用pyinstaller生成exe时报错 TypeError: an integer is required (got type bytes)

TypeError: an integer is required (got type bytes)

解决办法:报错前的pyinstaller是用 pip install pyinstaller 来安装的,改成用 pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz 再安装一次。

来源:https://www.cnblogs.com/springsnow/p/11884507.html

标签:Python,PyInstaller,库,程序,打包,exe
0
投稿

猜你喜欢

  • 图文详解Mysql使用left join写查询语句执行很慢问题的解决

    2024-01-13 17:14:52
  • Python专用方法与迭代机制实例分析

    2021-09-07 22:05:22
  • python中封包建立过程实例

    2021-11-13 14:29:08
  • EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表

    2012-01-29 18:07:30
  • golang之数据验证validator的实现

    2024-04-26 17:36:03
  • Python如何读取、写入JSON数据

    2021-10-26 18:28:19
  • MySQL存储引擎简介及MyISAM和InnoDB的区别

    2024-01-26 23:53:17
  • 基于Python实现的恋爱对话小程序详解

    2023-01-14 11:08:38
  • Python基于辗转相除法求解最大公约数的方法示例

    2023-08-24 19:47:35
  • asp 类型转换函数大全第1/2页

    2011-04-07 11:06:00
  • Django 实现xadmin后台菜单改为中文

    2021-12-28 10:31:49
  • asp程序定义变量比不定义变量速度快一倍

    2012-12-04 20:06:32
  • Python实现K折交叉验证法的方法步骤

    2021-08-04 13:58:25
  • pygame实现简单五子棋游戏

    2022-03-22 08:50:57
  • IE7下动态创建Iframe时,去除边框的办法

    2009-01-19 13:56:00
  • 10条影响CSS渲染速度的写法与建议

    2008-09-09 22:02:00
  • asp多关键词查询方案

    2008-05-09 12:24:00
  • 详解python中eval函数的作用

    2022-06-03 07:46:31
  • python安装及变量名介绍详解

    2023-09-24 19:23:20
  • Vue使用Echarts画柱状图详解

    2024-05-29 22:22:29
  • asp之家 网络编程 m.aspxhome.com