Python打包神器,打包速度快生成文件小防反编译

news2024/11/18 13:58:30

分享一款打包速度快、生成文件小、更加安全的Python打包神器,本内容来源于网络。

一. pyinstaller和Nuitka使用感受

1.1 使用需求

这次也是由于项目需要,要将python的代码转成exe的程序,在找了许久后,发现了2个都能对python项目打包的工具——pyintaller和nuitka。

这2个工具同时都能满足项目的需要:

  • 隐藏源码。这里的pyinstaller是通过设置key来对源码进行加密的;而nuitka则是将python源码转成C++(这里得到的是二进制的pyd文件,防止了反编译),然后再编译成可执行文件。
  • 方便移植。用户使用方便,不用再安装什么python啊,第三方包之类的。

1.2 使用感受

2个工具使用后的最大的感受就是:

  • pyinstaller体验很差!
  • 一个深度学习的项目最后转成的exe竟然有近3个G的大小(pyinstaller是将整个运行环境进行打包),对,你没听错,一个EXE有3个G!
  • 打包超级慢,启动超级慢。
  • nuitka真香!
  • 同一个项目,生成的exe只有7M!
  • 打包超级快(1min以内),启动超级快。

二. Nuitka的安装及使用

2.1 nuitka的安装

  • 直接利用pip即可安装:pip install Nuitka
  • 下载vs2019(MSVS)或者MinGW64,反正都是C++的编译器,随便下。

2.2 使用过程

对于第三方依赖包较多的项目(比如需要import torch,tensorflow,cv2,numpy,pandas,geopy等等)而言,这里最好打包的方式是只将属于自己的代码转成C++,不管这些大型的第三方包!

以下是我demo的一个目录结构(这里使用了pytq5框架写的界面):

├─utils//源码1文件夹├─src//源码2文件夹├─logo.ico//demo的图标└─demo.py//main文件

使用以下命令(调试)直接生成exe文件:

nuitka --standalone --show-memory --show-progress --nofollow-imports --plugin-enable=qt-plugins --follow-import-to=utils,src --output-dir=out --windows-icon-from-ico=./logo.ico demo.py

这里简单介绍下我上面的nuitka的命令:

  • –standalone:方便移植到其他机器,不用再安装python
  • –show-memory --show-progress:展示整个安装的进度过程
  • –nofollow-imports:不编译代码中所有的import,比如keras,numpy之类的。
  • –plugin-enable=qt-plugins:我这里用到pyqt5来做界面的,这里nuitka有其对应的插件。
  • –follow-import-to=utils,src:需要编译成C++代码的指定的2个包含源码的文件夹,这里用,来进行分隔。
  • –output-dir=out:指定输出的结果路径为out。
  • –windows-icon-from-ico=./logo.ico:指定生成的exe的图标为logo.ico这个图标,这里推荐一个将图片转成ico格式文件的网站(比特虫)。
  • –windows-disable-console:运行exe取消弹框。这里没有放上去是因为我们还需要调试,可能哪里还有问题之类的。

经过1min的编译之后,你就能在你的目录下看到:

├─utils//源码1文件夹├─src//源码2文件夹├─out//生成的exe文件夹
    ├─demo.build 
    └─demo.dist
		└─demo.exe//生成的exe文件├─logo.ico//demo的图标└─demo.py//main文件

当然这里你会发现真正运行exe的时候,会报错:no module named torch,cv2,tensorflow等等这些没有转成C++的第三方包。

这里需要找到这些包(我的是在software\python3.7\Lib\site-packages下)复制(比如numpy,cv2这个文件夹)到demo.dist路径下。

至此,exe能完美运行啦!

最后

在学习python中有任何困难不懂的可以微信扫描下方CSDN官方认证二维码加入python交流学习
多多交流问题,互帮互助,这里有不错的学习教程和开发工具。

python兼职资源+python全套学习资料

在这里插入图片描述

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

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

相关文章

软件测试之系统测试总结报告

引言 编写目的 编写该测试总结报告主要有以下几个目的 通过对测试结果的分析,得到对软件质量的评价分析测试的过程,产品,资源,信息,为以后制定测试计划提供参考评估测试测试执行和测试计划是否符合分析系统存在的缺陷…

(附源码)Springboot中北创新创业官网 毕业设计 271443

Springboot中北创新创业官网 摘 要 进入21世纪以来,计算机有了迅速的发展。计算机应用、信息技术全面渗透到了人类社会的各个方面,信息化已成为世界经济和社会发展的大趋势。本文主要通过对中北创新创业官网的功能性需求分析,对系统的安全性和…

HTTP状态码206报错

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码的第一个数字代表了…

基于jsp+mysql+ssm富锦市业余足球联赛管理系统-计算机毕业设计

项目介绍 足球联赛管理系统主要目的是对足球联赛中心所有的足球联赛信息进行管理,并且合理管理好管理员发布球队、球员和比赛信息,会员浏览查看球队和比赛信息的流程。提高足球联赛管理的工作效率,降低管理的成本。本系统选用Windows作为服务…

Go-Excelize API源码阅读(四十一)——GetCellRichText

Go-Excelize API源码阅读(四十一)——GetCellRichText 开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发者更好地了解…

加固技术护城河,比亚迪商用车加速领跑全球电动化进程

在10月召开的德国汉诺威国际交通运输博览会上,比亚迪首次发布全新刀片电池客车底盘技术平台。 随后的11月,比亚迪首款基于全新刀片电池客车底盘技术平台的新车型B12A03重磅亮相第四届LTA-UITP新加坡国际交通大会暨展览会。 据悉,B12A03是一…

Java 基础(继承)

继承基础1. 继承的特点2. super关键字3. 继承中变量访问特点(就近原则)4. 继承中成员方法访问特点5. 继承中构造访问特点为什么子类中所有构造方法默认都会访问父类无参构造方法。如果父类中没有无参构造6. 重写概述应用注意事项方法重写和重载有什么区别…

ssm的校园单车自行车租赁系统|租车系统计算机专业毕业论文java毕业设计开题报告

💖💖更多项目资源,最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《ssm的校园单车租赁系统》该项目采用技术:jsp springmvcspringmybatis cssjs等相关技术,前端页面使用了EasyUI框架&#…

【Redis】分布式锁基础

1. 集群下的线程并发安全问题 当项目形成集群时,每个 JVM 有一个锁监视器,这些锁监视器彼此间不互通,因此会出现集群下的线程并发安全问题,如下图所示: 2. 分布式锁 分布式锁是解决集群下的线程安全问题的方案&#…

Google Earth Engine(GEE)——image.select(...).rgbToHsv is not a function

本错误涵盖了好多错误,主要的原因就是函数不明确,不知道如何使用,以及函数的参数的设定,所以这里大家要先去看函数,另外,最主要的问题就是影像集合和影像要区分开,否则就会出现xxx is nor a function。这里我们用要注意!!! 提示: Line 9: image.select(...).rgbTo…

YApi跨域插件cross-request无法使用的解决方案

cross-request遇到的问题 最近在使用cross-request插件会收到一些报错信息: Manifest version 2 is deprecated, and support will be removed in 2023. See https://developer.chrome.com/blog/mv2-transition/ for more details. 以上信息是说Google推出了Man…

ADI的DSP开发软件:CCES软件的使用说明(很早期写的一点心得)

CCES 是 ADI 最新的 DSP 开发环境,全称是 Cross Core Embedded Studio,我从 2012 年的1.0.1 版开始使用,也曾经写过一个非常详细的软件安装文档,现在来详细的说一说 CCES 软件的使用操作。下面是我列出来的标题,一个一…

点成分享 | 为什么动物细胞培养大都需要二氧化碳培养箱

在进行动物细胞体外培养的过程中,培养条件苛刻,仅在环境因素方面除了要有严格的无菌环境、适合的温度、渗透压、相对湿度等,维持细胞周围的气体环境和pH稳定也十分重要。 动物细胞的体外培养需要理想的气体环境和适宜的pH环境。众所周知&…

Python中的type和object详解

这篇博客主要描述Python的新风格对象(new-style objects)&#xff0c;如下&#xff1a; <type type>和<type object>分别是什么&#xff1f;用户自定义的类和实例之间是怎么联系的&#xff1f;它们和内置类型又是怎么联系的&#xff1f;什么是元类(metaclasses)&a…

npm安装慢 ,卡在sill idealTree buildDeps不动

先说结论&#xff1a;node的默认镜像是国外的&#xff0c;修改镜像为国内地址。 报错截图&#xff1a; Failed to check for updates&#xff0c;开始以为是版本问题&#xff0c;并没有理会&#xff0c;直接创建项目&#xff0c;结果卡在了sill idealTree buildDeps&#xff08…

有关于torch.autograd.grad

torch.autograd模块给用户提供了一个自定义求导的接口。torch.autograd.grad可以手动地将loss对某部分参数进行梯度求导&#xff0c;特别适用于debug和观测。 笔者经常使用这个接口用于观测模型优化出现问题时&#xff0c;梯度值是否出现异常&#xff1b;以及用于代替tensorbo…

检验基础的 JavaScript 面试题

1. 下面代码的输出是什么&#xff1f; function sayHi() {console.log(name);console.log(age);var name "Lydia";let age 21; }sayHi(); A: Lydia 和 undefined B: Lydia 和 ReferenceError C: ReferenceError 和 21 D: undefined 和 ReferenceError 答案: D…

12月编程语言排行榜公布!一起来看变化!

2022年迎来了最后一个月&#xff0c;我们可以看到&#xff0c;在这一年中编程语言起起伏伏&#xff0c;有的语言始终炙手可热&#xff0c;而有的语言却逐渐“没落”… 日前&#xff0c;全球知名TIOBE编程语言社区发布了12月编程语言排行榜&#xff0c;有哪些新变化&#xff1f…

一篇博客搞定深度学习基本概念与反向传播

目录 深度学习的发展过程 深度学习的步骤 定义Neural NetWork 全前向连接 softmax介绍 定义loss函数 定义优化器选择最优参数optimization 反向传播Backpropagation 深度学习介绍 反向传播视频 深度学习的发展过程 perceptron(liner model)感知机——线性模型 perc…

ESP32入门基础之资源管理

文章目录1 ESP32-DevKitC V4&#xff08;ESP32-WROVER-E&IE&#xff09;板载资源2 FreeRTOS任务内存使用监控1 ESP32-DevKitC V4&#xff08;ESP32-WROVER-E&IE&#xff09;板载资源 ESP32-DevKitC V4 入门指南 esp32-devkitc开发板参数对比 在工程中使用函数查询可用…