python 打包可执行文件-Nuitka详解

2023-10-08 08:04

本文主要是介绍python 打包可执行文件-Nuitka详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python 打包可执行文件-Nuitka详解

  • 引言
  • 一、参数详解
  • 二、与pyinstaller对比
  • 三、打包总结

引言

Nuitka是用Python编写的优化Python编译器,它可以创建运行时不需要单独安装程序的可执行文件。简单易使用,与Python2(2.6、2.7)和Python3(3.3-3.10)完全兼容,适用于Windows、macOS、Linux等平台。

安装:pip install -U nuitka + 还需要C++的编译器,详情可以看文档的Requirements部分
官方文档:https://www.nuitka.net/doc/user-manual.html

  • 以python MP4视频转GIF动图这篇博客的程序为例,展示Nuitka的用法。并与pyinstaller进行对比。

一、参数详解

打包命令:nuitka xxx.py,其主要参数如下:

  • --help 查看所有参数。
  • --standalone 输出一个文件夹,包含可执行文件和依赖库,无需Pyhon环境即可运行。
  • --onefile 打包成一个文件,而不是一个文件夹。
  • --nofollow-imports 不编译任何导入的模块,覆盖所有其他包含选项,并且不适用于standalone模式。
  • --disable-console 禁用控制台窗口并创建GUI应用程序 (默认关闭)。
  • --output-filename=FILENAME 输出文件名称。
  • --enable-plugin=pyqt5 包含Qt插件,可使用--plugin-list 查询。
  • 查询所有插件nuitka --plugin-list
    在这里插入图片描述

进行使用,对main.py进行打包:

  • nuitka main.py,需要运行cmd脚本配置环境再打开exe文件
    在这里插入图片描述

  • nuitka --standalone --nofollow-imports --enable-plugin=pyqt5 main.py,不得不说,真的费CPU和时间,因为要先编译第三方库
    help显示 --standalone默认 “–follow-imports” and “–python-flag=no_site”,应该与–nofollow-imports (help也提示不适用于standalone模式)冲突,默认还是要编译所有库。

  • nuitka --onefile--nofollow-imports --enable-plugin=pyqt5 --output-filename=MP4_to_GIF main.py,也是默认编译所有库,但编译成的可执行文件确实小了。
    在这里插入图片描述

  • nuitka --onefile --nofollow-imports --disable-console --enable-plugin=pyqt5 --output-filename=MP4_to_GIF main.py
    在这里插入图片描述

二、与pyinstaller对比

参考我的博客:python 打包可执行文件-pyinstaller详解

  • 内存
    pyinstaller加了很多trick 85MBnuitka只有45MB,比pyinstaller小了一半。nuitka不用standalone 和 onefile还是很快的,也超级小,就是需要python环境。
  • 执行速度
    就可执行文件的打开速度,感觉不到有特别大的差距…,打包成单独一个可执行文件,都挺慢的。打包成文件夹,都挺快…
  • 打包速度
    pyinstaller打包速度会快很多。nuitka不用–standalone 或者 --onfile也很快,但感觉就像仅仅加了个脚本用来运行.py一样…

可能与程序大小有关,以上测试用的MP4_to_GIF只是个小程序、

也可参考:比较PyInstaller和Nuitka

三、打包总结

  1. 使用python写的小工具,我选择pyinstaller
  2. 大程序我选择c++

这篇关于python 打包可执行文件-Nuitka详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/163879

相关文章

基于Python编写一个git自动上传的脚本(打包成exe)

《基于Python编写一个git自动上传的脚本(打包成exe)》这篇文章主要为大家详细介绍了如何基于Python编写一个git自动上传的脚本并打包成exe,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录前言效果如下源码实现利用pyinstaller打包成exe利用ResourceHacker修改e

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Python中Tkinter GUI编程详细教程

《Python中TkinterGUI编程详细教程》Tkinter作为Python编程语言中构建GUI的一个重要组件,其教程对于任何希望将Python应用到实际编程中的开发者来说都是宝贵的资源,这篇文... 目录前言1. Tkinter 简介2. 第一个 Tkinter 程序3. 窗口和基础组件3.1 创建窗

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

Springboot配置文件相关语法及读取方式详解

《Springboot配置文件相关语法及读取方式详解》本文主要介绍了SpringBoot中的两种配置文件形式,即.properties文件和.yml/.yaml文件,详细讲解了这两种文件的语法和读取方... 目录配置文件的形式语法1、key-value形式2、数组形式读取方式1、通过@value注解2、通过

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller