【python】使用Nuitka打包python项目-demo示例

2023-09-20 15:09:32

写在前面

本文的demo示例的代码/数据可从笔者的GitCode获取: HelloWorld

参考

  • Nuitka官网: https://github.com/Nuitka/Nuitka
  • Nuitka使用: https://daobook.github.io/nuitka-doc/zh_CN/user-manual.html#use-cases

准备工作

工作环境: Windowns10
python版本: Python 3.10.7

  1. 安装Nuitka

    pip install nuitka
    
  2. 下载 gcc

    下载地址 https://github.com/brechtsanders/winlibs_mingw/releases

    如果没有下载或下载的版本不对应的话,在打包时会提示相应安装包是否下载, 选择输入"Yes”下载即可. 如果自行下载的 gcc 包, 解压后配置用户环境变量, 将解压路径 xxx\bin 添加的用户环境变量中.

    PS: 笔者执行打包时, 还提示安装ccache, 选择Yes自动下载 使用的下载路径.

Quick Start

先构建项目demo脚本, 打印一些信息然后输入文件并读取第一列后再输出.

测试脚本:

python hello.py -i test/data.txt -o test/data.pro.txt

主脚本测试完成后, 开始打包:

# 开始打包主脚本 hello.py
python -m nuitka \
        --output-dir=./hellooo \
        --standalone --show-memory --show-progress \
        --follow-import-to=utils,src \
        --windows-icon-from-ico=./logo.ico \
        hello.py

参数说明

参数说明
–output-dir指定输出的结果路径
–standalone打包成独立的文件
–show-progress显示打包进度
–show-memory显示占用内存
–follow-import-to指定打包时同时打包的源码文件夹,用","分隔
–windows-icon-from-ico指定打包程序exe的图标
其他参数
–mingw64指定编译器
–nofollow-imports不编译代码中所有的import
–plugin-enable需要加载的插件
–windows-disable-console
–recurse-all
–recurse-not-to
–onefile
–remove-output
–disable-console

使用打包程序

打包程序在输出目录 outdir/xxx.dist/xxx.exe

# 打包程序看help
./hellooo/hello.dist/hello.exe --help

# 使用打包后程序
./hellooo/hello.dist/hello.exe -i test/data.txt -o test/data.test_pack.txt

输出目录结构

执行打包程序后,输出目录的文件结构如下:

$ tree.com //a //f 
+---hello.build
|   |   .sconsign-310.dblite
|   |   @link_input.txt
|   |   build_definitions.h
|   |   ccache-24780.txt
|   |   module.src.c
|   |   module.src.const
|   |   module.src.o
|   |   module.src.source1.c
|   |   module.src.source1.const
|   |   module.src.source1.o
|   |   module.utils.c
|   |   module.utils.const
|   |   module.utils.o
|   |   module.utils.source2.c
|   |   module.utils.source2.const
|   |   module.utils.source2.o
|   |   module.__main__.c
|   |   module.__main__.const
|   |   module.__main__.o
|   |   scons-report.txt
|   |   __bytecode.const
|   |   __constants.bin
|   |   __constants.c
|   |   __constants.const
|   |   __constants.h
|   |   __constants.o
|   |   __constants.txt
|   |   __helpers.c
|   |   __helpers.h
|   |   __helpers.o
|   |   __loader.c
|   |   __loader.o
|   |
|   \---static_src
|           CompiledFunctionType.c
|           CompiledFunctionType.o
|           MainProgram.c
|           MainProgram.o
|
\---hello.dist
        hello.exe
        python310.dll
        ucrtbase.dll
        unicodedata.pyd
        vcruntime140.dll
        _bz2.pyd
        _decimal.pyd
        _lzma.pyd

当前demo示例下删除了这些文件, 只保留了 hellooo/hello.dist/hello.exe主程序文件 (4.27M)。

日志

2023.09.20

  • 初始版本

更多推荐

Vue中的深度监听(Deep Watch):详细解析与实际示例

Vue中的深度监听(DeepWatch):详细解析与实际示例Vue.js是一款流行的前端JavaScript框架,其响应式系统是其核心特性之一。通过响应式系统,Vue允许开发者轻松地监听数据的变化并对其做出响应。在某些情况下,你可能需要对嵌套的数据结构进行深度监听,以便在任何级别的数据变化时触发相应的操作。本文将深入探

HTML5 Canvas动画实例

在开发在线游戏时,绘制动画是非常重要的。本文介绍一个使用CanvasAPI实现的动画实例——游戏人物的跑步动画。01、动画的概念及原理1、动画动画是通过一幅幅静止的、内容不同的画面(即帧)快速播放来呈现的,使人们在视觉上产生动的感觉。这是利用了人类眼睛的视觉暂留原理。利用人的这种生理特性可制作出具有高度想象力和表现力的

Matlab论文插图绘制模板第115期—带Latex公式的图

之前的文章中,分享了Matlab带线标记的图:带阴影标记的图:带箭头标记的图:带图形标记的图:进一步,分享一下带Latex公式的图,先来看一下成品效果:特别提示:本期内容『数据+代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关注同名公号【阿昆的科研日常】,后台回复关键词【绘图桶】查看加入方式。模板中最关键

代码随想录算法训练营第三十七天|738.单调递增的数字 968.监控二叉树 总结

738.单调递增的数字代码随想录例如:98,一旦出现strNum[i-1]>strNum[i]的情况(非单调递增),首先想让strNum[i-1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。从前向后遍历的话,遇到strNum[i-1]>strNum[i]的情况,让strNu

openjdk和oracle jdk的区别

OpenJDK和OracleJDK都是JavaDevelopmentKit(JDK)的不同实现,用于开发和运行Java应用程序。它们有一些区别,但也有很多相似之处。以下是它们之间的主要区别:开源性质:OpenJDK是开源的,由一个社区维护和开发,它的源代码可以在OpenJDK项目的网站上找到。这意味着任何人都可以免费获

Haproxy集群调度器与部署

目录一、Haproxy介绍:1.Haproxy应用分析:2.Haproxy的特性:3.Haproxy常见的调度算法:4.LVS、Nginx、HAproxy的区别:4.1Haproxy与lvs对比:4.2Haproxy与nginx对比:5.Haproxy优点:二、Haproxy部署:1.配置Haproxy负载调度器:1.

【Spring】Spring的手动实现

🎄欢迎来到@边境矢梦°的csdn博文🎄🎄本文主要梳理手动实现Spring底层机制🎄🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆Ps:月亮越亮说明知识点越重要(重要性或者难度越大)🌑🌒🌓🌔🌕目录实现任务阶段1-编写自己Spring

Nginx rewrite+防盗链

NginxNginx6、重写功能rewrite6.1if指令6.2return6.3set指令6.4break指令6.5rewrite指令6.5.1基本原理6.5.2语法格式6.5.3举例6.5.3.1测试访问bj跳转到beijing6.5.3.2域名重定向:所有域名都跳转到accp7、防盗链7.1什么是防盗链7.2防

MySQL常用函数集锦 --- 字符串|数值|日期|流程函数总结

个人主页:兜里有颗棉花糖欢迎点赞👍收藏✨留言✉加关注💓本文由兜里有颗棉花糖原创收录于专栏【MySQL学习专栏】🎈本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌目录一、字符串函数二、数值函数小练习三、日期函数四、流程函数一、字符串函数关于字符串函数请看此文章:字符串函数二、数值函数下面来介绍5

写一篇nginx配置指南

nginx.conf配置找到Nginx的安装目录下的nginx.conf文件,该文件负责Nginx的基础功能配置。配置文件概述Nginx的主配置文件(conf/nginx.conf)按以下结构组织:配置块功能描述全局块与Nginx运行相关的全局设置events块与网络连接有关的设置http块代理、缓存、日志、虚拟主机等

Golang 字符串

目录1.Golang字符串1.1.基础概念1.2.字符串编码1.3.遍历字符串1.4.类型转换1.5.总结1.6.StringConcatenation(字符串连接)1.6.1.Usingthe`+`operator1.6.2.Usingthe`+=`operator1.6.3.UsingtheJoinmethod1.

热文推荐