文章目录

  • Nuitka 打包Python程序
      • 🚀 **一、Nuitka 核心优势**
      • ⚙️ **二、环境准备(Windows 示例)**
      • 📦 **三、基础打包命令**
        • **单文件脚本打包**
        • **带第三方库的项目**
      • 🛠️ **四、高级配置选项**
        • **示例:完整命令**
      • ⚠️ **五、常见问题与解决**
      • 📊 **六、Nuitka vs 其他工具**
      • 💎 **七、最佳实践建议**
      • 💡 **八、使用举例**
      • 总结

Nuitka 打包Python程序

需要把Python写的代码打包给朋友,于是通过DeepSeek检索了Nuitka的使用,之前用过pyinstaller,参考我的博客PySide6 GUI 学习笔记——Python文件编译打包,这次我采用Nuitka打包一个简单的程序。
以下是使用 Nuitka 将 Python 程序打包为独立 EXE 文件的完整指南,结合核心优势、详细步骤和避坑技巧:


🚀 一、Nuitka 核心优势

  1. 性能卓越
    • 将 Python 编译为 C++ 代码,运行速度比传统打包工具快 30%-300%。
    • 支持 SIMD 指令集优化(如 AVX2/SSE4),适合高频计算场景(金融量化、工业视觉)。
  2. 安全加固
    • 三重防护机制:控制流扁平化、字符串常量加密(AES-256-CTR)、元数据混淆,大幅提高反编译成本。
  3. 体积控制
    • 基础增量仅 2-5MB,支持 UPX 压缩(体积减少 60%)。
  4. 跨平台支持
    • 兼容 Windows/macOS/Linux,完美支持 Python 3.4-3.13 和 Python 2.7。

⚙️ 二、环境准备(Windows 示例)

  1. 安装依赖
    • Python 环境:推荐 Python 3.10+(需与目标环境一致)。
    • C 编译器:安装 MinGW64(选择 x86_64-posix-seh 版本),并添加 C:\mingw64\bin 到系统 PATH。
    • 验证安装
      pip install nuitka
      python -m nuitka --version  # 输出版本号即成功
      

📦 三、基础打包命令

单文件脚本打包
python -m nuitka --standalone --onefile your_script.py
  • --standalone:生成独立 EXE(包含所有依赖)。
  • --onefile:输出为单个 EXE 文件。
  • 输出位置:生成 your_script.dist 目录,内含 EXE 文件。
带第三方库的项目
python -m nuitka --standalone --onefile --include-package=numpy,requests app.py
  • --include-package:显式包含动态导入的库(如 numpyrequests)。

🛠️ 四、高级配置选项

参数作用
--enable-plugin=tk-inter启用 GUI 插件支持(如 Tkinter/PyQt)
--windows-icon=app.ico设置 EXE 图标(需 .ico 格式)
--remove-output编译后删除临时文件
--jobs=4多线程编译加速(根据 CPU 核心数调整)
--lto=yes启用链接时优化(提升运行效率)
--disable-console隐藏控制台窗口(适用于 GUI 程序)
示例:完整命令
python -m nuitka --standalone --onefile --enable-plugin=pyqt5 --windows-icon=app.ico --jobs=4 app.py

⚠️ 五、常见问题与解决

  1. 动态导入失败

    • 现象importlib.import_module("mod") 未包含依赖。
    • 解决:添加 --include-package=mod--include-module=mod
  2. 杀毒软件误报

    • 解决:编译时添加数字签名,或提交至杀毒软件白名单。
  3. 大型库(如 PyTorch)打包失败

    • 解决:显式启用插件和依赖:
      python -m nuitka --standalone --include-module=torch._C --include-package=torch-static app.py
      
  4. 编译速度慢

    • 优化:使用 --jobs=N 多线程编译,或跳过调试信息 --disable-console

📊 六、Nuitka vs 其他工具

特性NuitkaPyInstallercx_Freeze
执行速度⭐⭐⭐⭐⭐ (快 30-300%)⭐⭐⭐⭐⭐
加密强度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
体积控制⭐⭐⭐⭐ (支持 UPX)⭐⭐⭐⭐⭐
依赖处理智能分析依赖树需手动指定需复杂配置
适用场景商业分发/高性能计算简单脚本高度自定义项目

💎 七、最佳实践建议

  1. 使用虚拟环境

    • 通过 Miniconda 创建隔离环境,避免冗余依赖:
      conda create -n pack_env python=3.10
      conda activate pack_env
      pip install nuitka pandas numpy
      
  2. 分离资源文件

    • 数据文件通过 --include-data-dir=res/;res/ 打包,代码内用 sys._MEIPASS 访问。
  3. 敏感信息保护

    • 结合 Cython 混合编译核心模块(先转 .pyx 再编译):
      # setup_cython.py
      from distutils.core import setup
      from Cython.Build import cythonize
      setup(ext_modules=cythonize("secret_module.pyx"))
      
      再用 Nuitka 打包主程序。

💡 八、使用举例

我有一个名为google_click.py的文件,需要打包成exe文件,使用了如下的命令:

python -m nuitka --standalone --onefile --jobs=8 --output-dir=out  --lto=
yes google_click.py

运行过程如下:

Nuitka-Options: Used command line options:
Nuitka-Options:   --standalone --onefile --jobs=8 --output-dir=out --lto=yes google_click.py
Nuitka: Starting Python compilation with:
Nuitka:   Version '2.7.10' on Python 3.12 (flavor 'Unknown') commercial grade 'not installed'.
Nuitka-Plugins:options-nanny: Using module 'trio._core._ki' (version 0.30.0) with incomplete support: Disabled careful
Nuitka-Plugins:options-nanny: handling of KeyboardInterrupt in 'trio'
Nuitka-Plugins:anti-bloat: Not including 'pandas.core._numba.extensions' automatically in order to avoid bloat, but this may
Nuitka-Plugins:anti-bloat: cause: no numba acceleration.
Nuitka: Completed Python level compilation and optimization.
Nuitka: Generating source code for C backend compiler.
Nuitka: Running data composer tool for optimal constant value handling.                                         
Nuitka: Running C compilation via Scons.
Nuitka-Scons: Backend C compiler: cl (cl 14.3).
Nuitka-Scons: Backend C linking with 723 files (no progress information available for this stage).
Nuitka-Scons: Compiled 723 C files using clcache with 0 cache hits and 723 cache misses.
Nuitka-Plugins:dll-files: Found 1 file DLLs from selenium installation.
Nuitka will make use of Dependency Walker (https://dependencywalker.com) tool
to analyze the dependencies of Python extension modules.Is it OK to download and put it in 'C:\Users\yeshe\AppData\Local\Nuitka\Nuitka\Cache\DOWNLO~1\depends\x86_64'.Fully automatic, cached. Proceed and download? [Yes]/No : yes
Nuitka: Downloading 'https://dependencywalker.com/depends22_x64.zip'.
Nuitka: Extracting to 'C:\Users\yeshe\AppData\Local\Nuitka\Nuitka\Cache\DOWNLO~1\depends\x86_64\depends.exe'
Nuitka-Plugins:data-files: Included data file 'certifi\cacert.pem' due to package data for 'certifi'.
Nuitka-Plugins:data-files: Included data file 'pandas\io\formats\templates\html.tpl' due to package data directory 'templates'
Nuitka-Plugins:data-files: for 'pandas.io.formats'.
Nuitka-Plugins:data-files: Included data file 'pandas\io\formats\templates\html_style.tpl' due to package data directory      
Nuitka-Plugins:data-files: 'templates' for 'pandas.io.formats'.
Nuitka-Plugins:data-files: Included data file 'pandas\io\formats\templates\html_table.tpl' due to package data directory      
Nuitka-Plugins:data-files: 'templates' for 'pandas.io.formats'.
Nuitka-Plugins:data-files: Included data file 'pandas\io\formats\templates\latex.tpl' due to package data directory
Nuitka-Plugins:data-files: 'templates' for 'pandas.io.formats'.
Nuitka-Plugins:data-files: Included data file 'pandas\io\formats\templates\latex_longtable.tpl' due to package data directory 
Nuitka-Plugins:data-files: 'templates' for 'pandas.io.formats'.
Nuitka-Plugins:data-files: Included data file 'pandas\io\formats\templates\latex_table.tpl' due to package data directory     
Nuitka-Plugins:data-files: 'templates' for 'pandas.io.formats'.
Nuitka-Plugins:data-files: Included data file 'pandas\io\formats\templates\string.tpl' due to package data directory
Nuitka-Plugins:data-files: 'templates' for 'pandas.io.formats'.
Nuitka-Plugins:data-files: Included 604 data files due to package data directory 'zoneinfo' for 'pytz'.
Nuitka-Plugins:data-files: Included data file 'selenium\webdriver\common\mutation-listener.js' due to package data directory  
Nuitka-Plugins:data-files: '.' for 'selenium'.
Nuitka-Plugins:data-files: Included data file 'selenium\webdriver\common\linux\selenium-manager' due to package data directory
Nuitka-Plugins:data-files: '.' for 'selenium'.
Nuitka-Plugins:data-files: Included data file 'selenium\webdriver\common\macos\selenium-manager' due to package data directory
Nuitka-Plugins:data-files: '.' for 'selenium'.
Nuitka-Plugins:data-files: Included data file 'selenium\webdriver\firefox\webdriver_prefs.json' due to package data directory 
Nuitka-Plugins:data-files: '.' for 'selenium'.
Nuitka-Plugins:data-files: Included data file 'selenium\webdriver\remote\findElements.js' due to package data directory '.'   
Nuitka-Plugins:data-files: for 'selenium'.
Nuitka-Plugins:data-files: Included data file 'selenium\webdriver\remote\getAttribute.js' due to package data directory '.'   
Nuitka-Plugins:data-files: for 'selenium'.
Nuitka-Plugins:data-files: Included data file 'selenium\webdriver\remote\isDisplayed.js' due to package data directory '.' for
Nuitka-Plugins:data-files: 'selenium'.
Nuitka-Postprocessing: Creating single file from dist folder, this may take a while.
Nuitka-Onefile: Running bootstrap binary compilation via Scons.
Nuitka-Scons: Onefile C compiler: cl (cl 14.3).
Nuitka-Scons: Onefile C linking.
Nuitka-Scons: Compiled 1 C files using clcache with 0 cache hits and 1 cache misses.
Nuitka-Onefile: Using compression for onefile payload.
Nuitka-Onefile: Onefile payload compression ratio (24.35%) size 152398972 to 37107219.
Nuitka-Onefile: Keeping onefile build directory 'out\google_click.onefile-build'.
Nuitka: Keeping dist folder 'out\google_click.dist' for inspection, no need to use it.
Nuitka: Keeping build directory 'out\google_click.build'.
Nuitka: Successfully created 'D:\Source\Repos\Visual Studio Code\some_selenium_app\out\google_click.exe'.

我指定里一个out文件夹,生成的独立运行文件放在了该文件夹中:

文件目录

总结

Nuitka 凭借编译级优化工业级安全,已成为 Python 打包的首选方案,尤其适合:

  • 🔒 商业软件分发(防源码泄露)
  • ⚡ 高频计算场景(实时数据处理)
  • 🔧 混合 C/C++ 项目(如深度学习框架集成)

命令模板:

python -m nuitka --standalone --onefile --enable-plugin=upx --jobs=4 --lto=yes app.py

遇到复杂依赖时,优先通过 --include-package 显式声明缺失模块,并通过 Nuitka 官方文档 查询插件支持列表。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动获取文件的内存大小怎么设置?批量获取文件名和内存大小到Excel中的方法

在对重要数据进行备份或迁移操作前,为确保备份全面无遗漏,且合理规划目标存储设备的空间,会将文件名和内存提取到 Excel。比如,某个部门要将旧电脑中的文件迁移到新服务器,提前整理文件信息,能清晰知道所需…

创建型设计模式——单例模式

单例设计模式 什么是创建型设计模式有哪些创建型设计模式 单例设计模式实现方法饿汉式单例懒汉式单例实现方法 CSDN——C单例模式详解 单例设计模式是一种创建型设计模式 什么是创建型设计模式 创建型设计模式,就是通过控制对象的创建方式来解决设计问题。 有哪…

html 照片环 - 图片的动态3D环绕

html 照片环 - 图片的动态3D环绕 引言一、源码二、图转base64参考链接 引言 效果展示&#xff1a; 一、源码 原始图片的base64编码字符太多了&#xff0c;博客放不下&#xff0c;将图片缩小后的加入html的源码如下&#xff1a; <!DOCTYPE html> <html><hea…

ADIOS2 介绍与使用指南

文章目录 ADIOS2 介绍与使用指南什么是ADIOS2?ADIOS2 的主要特点ADIOS2 核心概念ADIOS2 安装Linux 系统安装Windows 安装 ADIOS2 基本使用C 示例Python 示例 ADIOS2 高级特性并行I/O流模式 ADIOS2 引擎类型性能优化建议总结 ADIOS2 介绍与使用指南 什么是ADIOS2? ADIOS2(Ad…

网络安全 vs 信息安全的本质解析:数据盾牌与网络防线的辩证关系关系

在数字化生存的今天&#xff0c;每一次手机支付、每一份云端文档、每一条医疗记录的背后&#xff0c;都矗立着这两座安全堡垒。理解它们的协同逻辑&#xff0c;不仅是技术从业者的必修课&#xff0c;更是企业构建数字防护体系的底层认知 —— 毕竟当勒索软件同时切断 "护城…

ping-pong操作

常见不匹配的原因 瞬时数据率的差异&#xff1b; 数据顺序的差异&#xff1b; 对比维度PipelineFIFOPing-Pong逻辑复制结构类型时序分级推进&#xff08;寄存器链&#xff09;环形队列&#xff08;缓冲区&#xff09;双缓冲区&#xff08;轮换使用&#xff09;功能块并行&am…

21.合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路&#xff1a;这里使用的主要数据结构是单链表。该算法采用经典的双指针技术来合并列表。 A dummy node is created; this node does not hold any meaningful value b…

vue3中简单易懂说明nextTick的使用

nextTick(): 等待下一次 DOM 更新刷新的工具方法 重点解释: 当你在 Vue 中更改响应式状态时&#xff0c;最终的 DOM 更新并不是同步生效的&#xff0c;而是由 Vue 将它们缓存在一个队列中&#xff0c;直到下一个“tick”才一起执行。这样是为了确保每个组件无论发生多少状态改变…

gRPC 相关介绍

介绍 依赖两大技术 HTTP/2 作为传输协议 gRPC 底层用 HTTP/2&#xff0c;它支持&#xff1a; 多路复用&#xff08;在一条 TCP 连接中并行传输多个请求和响应&#xff09;二进制传输&#xff08;更紧凑、高效&#xff09;流式传输&#xff08;客户端流、服务端流、双向流&…

PyTorch 模型镜像下载与安装指南

在国内&#xff0c;由于网络限制&#xff0c;直接从 PyTorch 官方源下载可能会遇到速度慢或无法访问的问题。为了解决这一问题&#xff0c;可以使用国内镜像源来加速下载和安装 PyTorch。 文章目录 安装指定版本的 PyTorch&#xff08;以 CUDA 11.8 为例&#xff09;安装 CPU 版…

2025年SVN学习价值分析

⚖️ 一、SVN的现状与应用场景分析 仍在特定领域发挥作用 传统企业维护场景&#xff1a;在金融、电信、政府等采用集中式开发流程的机构中&#xff0c;许多遗留系统仍使用SVN管理。这些系统往往体量庞大、架构稳定&#xff0c;迁移成本高&#xff0c;因此SVN短期内不会被完全替…

JavaScript中的10种排序算法:从入门到精通

作为前端开发者&#xff0c;排序算法是我们必须掌握的基础知识。无论是在面试中&#xff0c;还是在实际开发中处理数据展示时&#xff0c;排序都是一个常见需求。今天&#xff0c;我将用通俗易懂的方式&#xff0c;带你了解JavaScript中最常见的10种排序算法。 1. 冒泡排序 - …

【微信小程序】6、SpringBoot整合WxJava获取用户手机号

1、手机号快速验证组件 手机号快速验证组件 旨在帮助开发者向用户发起手机号申请&#xff0c;并且必须经过用户同意后&#xff0c;开发者才可获得由平台验证后的手机号&#xff0c;进而为用户提供相应服务。 该能力与手机号实时验证组件的区别为&#xff1a; 手机号快速验证…

redis8.0新特性:原生JSON支持详解

文章目录 一、写在前面二、使用1、基本命令&#xff08;1&#xff09;JSON.SET 设置 JSON 值&#xff08;2&#xff09;JSON.GET 获取 JSON 值&#xff08;3&#xff09;JSON.DEL 删除 JSON 值&#xff08;4&#xff09;JSON.MGET 批量获取&#xff08;5&#xff09;JSON.MSET …

QT网络调试助手开发全指南,软件设计图预研,后续文档跟进补充

网络调试助手 1 TCP网络调试助手 1.1 项目概述 网络相关的一些基础概念学习QTcpServer 学习QTcpClient 学习TextEdit特定位置输入文字颜色学习网络通信相关知识点 复习巩固之前UI控件 程序运行如下图所示 1.2 开发流程 1.3 QTtcp 服务器的关键流程 工程建立&#xff0c;需要在…

网络分层模型与协议体系技术研究报告

网络分层模型是计算机网络体系结构的核心框架&#xff0c;它通过将复杂的网络通信过程分解为多个层次&#xff0c;使网络设计、实现和维护变得更加模块化和标准化。 一、分层模型概念 1、OSI七层模型的详细解析 开放系统互连参考模型&#xff08;OSI/RM&#xff09;是国际标…

C++面向对象7——C继承与C++继承对比、C++继承详解

继承 C语言与C继承机制的对比与实现 一、C语言模拟继承的实现方法 C语言不支持面向对象编程的原生继承机制&#xff0c;但可以通过结构体嵌套和函数指针组合来模拟。 1. 结构体嵌套实现"is-a"关系 // 基类&#xff1a;Shape typedef struct {int x;int y; } Sha…

运维打铁: Windows 服务器基础运维要点解析

文章目录 思维导图一级节点&#xff1a;Windows 服务器基础运维要点 详细内容解析系统安装与配置硬件准备安装介质选择系统安装过程初始配置 日常监控与维护性能监控服务状态检查日志管理 安全管理账户与权限管理防火墙配置病毒防护 备份与恢复备份策略制定备份工具使用恢复测试…

Python实例题:基于量子计算的优化算法实现(量子计算、优化理论)

目录 Python实例题 题目 问题描述 解题思路 关键代码框架 难点分析 扩展方向 Python实例题 题目 基于量子计算的优化算法实现&#xff08;量子计算、优化理论&#xff09; 问题描述 开发一个基于量子计算的优化算法实现&#xff0c;包含以下功能&#xff1a; 量子计…

基本算法--蓝桥杯备考

1.前缀和 1.定义 假设有一个数组a[n],要计算它的前j个元素的和为 a[0]a[1]...a[j-1] 时间复杂度为O(j)&#xff0c;且随着j的变大时间复杂度越来越大。 使用了前缀和算法则为 sum[j]-sum[j-1] 时间复杂度是O(1)&#xff0c;且数据越大优势越明显。 2.例题一 详解见《可…