类似pyinstaller_Python 打包工具对比,Nuitka vs Pyinstaller

py2exe,Pyinstaller,Cx_freeze,Nuitka都可以完成python打包的任务。

Pyinstaller和Nuitka都号称跨平台,但其实顶多只能算是工具本身跨平台,实际体验中不仅打包产生的文件不能跨平台,能否成功打包本身也不确定。

Nuitka

nuitka的作用是将python程序转换成C语言的可执行elf文件。这样在运行时就可以享受到C语言处理过程中的优化,提高速度。经测试,Nuitka打包后的exe比Pyinstaller打包后的exe运行速度提升30%,PyQT5的UI文件转换成py文件转换成C语言后,界面秒开呀。

安装:

sudo apt-get install nuitka

使用:

假设有python文件 main.py 其中import了 a.py, b.py, c.py

转换为可执行文件只需运行:

nuitka --recurse-all main.py

运行后会生成main.exe文件,注意main.py中import的文件会被自动包含。

输入下面代码即可执行

./main.exe

但是有网友反馈了一些他的坑:

问题:

1.跨平台性很差

这点,上面的"python打包工具对比"中也谈到了。

具体在我使用时,在ubuntu中打包了一份python文件,拿到windows下运行,提示该版本的main.exe 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)版本的程序,然后联系软件发布者。

在centos中运行,提示有python依赖库找不到。

2.使用 --standalone参数后无法生成.exe文件

官网介绍说使用该参数可以解决代码对python是否安装的依赖The created binaries can be made executable independent of the Python installation, with --standalone option.

可是我用这个参数后就无法生成可执行文件了。

Pyinstaller

安装:

1、安装pywin32下载安装文件:查找到跟自己适用的python版本及window系统版本匹配的

使用pip命令安装:pip install pywin32

2、安装Pyinstaller下载安装文件安装:

使用pip命令安装:pip install PyInstaller

运行:

pyinstaller main.py

即可得到可执行文件,虽然也存在本机编译后的文件不能在服务器执行的问题:

gclt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /root/gclt/libz.so.1)

但是在服务器上编译的代码是可以在本机成功执行,当然了,所谓的跨平台,其实是个伪命题,Linux下编译产生的可执行文件并不能在Windows和Mac OS下执行,前者会产生类似下面的错误(使用Nuitka时也是这样)Too big to fit in memory

而在Mac OS下则会直接提示找不到相关可执行文件。

最后,分别在Linux,Windows,Mac OS下分别使用Pyinstaller完成任务

开发完python程序后使用pyinstaller 打包成exe程序后出现错误:

通常的打包命令:

pyinstaller.exe --hidden-import=queue -w -F $FileName$

运行出错

为了定位问题的出现需要修改上述打包命令为:pyinstaller.exe --hidden-import=queue -F $FileName$

有时候将.py文件打包成.exe文件后,不一定能够正常运行。但是点.exe后程序一闪而退,就不知道问题出在哪里?在运行程序后快速进行屏幕抓取:(可能需要抓多次)

错误信息

从上图中,可以看出由于文件找不到导致程序出错。

从这里也可以大致了解下pyinstaller成可执行程序的流程是:

会将exe解压到系统某处(图中为AppData/Local/Temp下),然后解释执行。

2. 也可以在cmd命令行 或者 Windows PowerShell里面运行.exe文件

解决 FileNotFoundError 问题

然后使用如下命令打包:pyinstaller.exe --onefile --additional-hooks-dir=. --hidden-import=queue -w -F robotManagerTools.py

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

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

相关文章

Android学习之PopupWindow

Android的对话框有两种:PopupWindow和AlertDialog。 详细说明如下: AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情; AlertDialog的位置固定,而PopupWindow的位置可以随意; A…

spring整合mybatis接口无法注入问题

在学习Spring完之后简单的了解了MyBatis。然后进行简单的整合,遇到MyBatista接口映射的Bean无法自动注入的问题; 代码异常: 线程“main”org.springframe .bean .factory中的异常。创建名为“UserController”的bean时出错:通过字段“userdao…

LR重新安装的问题

LR的安装,说难不难,说易也不易。在此就把我安装时碰到的问题记录下来,以供大家参考。 第一次安装时,我是成功了的。(注意:安装程序的目录不能有中文,当然同时你得有lincense) 后来因…

matlab柱状斜线_Matlab小练习:按斜线方向依次赋值矩阵

来自知乎问题,觉得挺有意思,留给学生解答之余,我也做了一番思考,得到三种解法。题目如下:以n80为例,————————————————————一、先要根据确定矩阵的阶数 如果先生成足够大矩阵&#xff0…

Programming C#.Classes and Objects.只读字段

只读字段 当字段声明中含有 readonly 修饰符时,该声明所引入的字段为只读字段。给只读字段的直接赋值只能作为声明的组成部分出现,或在同一类中的实例构造函数或静态构造函数中出现。(在这些上下文中,只读字段可以被多次赋值。&am…

会计知识

毛利 等于收入纯利 等于利润 按照:利润=收入-成本-费用 收入:收到的现金、支票、签单金额成本:买材料、酒水、电、工资、等费用:日租金、桌椅、碗、盘子等摊销、税金等等 ------------------------------------------…

2020-12-21

蜂鸣器(向导辅助) /******************************************************* This program was created by the CodeWizardAVR V3.12 Advanced Automatic Program Generator ?Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpin…

xgboost 一般多少棵树_大白话人工智能算法-第32节集成学习之通俗理解XGBoost原理和过程...

本节讲解XGBoost的原理~目录1、回顾:1.1 有监督学习中的相关概念1.2 回归树概念1.3 树的优点2、怎么训练模型:2.1 案例引入2.2 XGBoost目标函数求解3、XGBoost中正则项的显式表达4、如何生长一棵新的树?5、xgboost相比原始GBDT的优化&#xf…

C++函数中返回引用和返回值的区别

https://www.cnblogs.com/JMLiu/p/7928425.html转载于:https://www.cnblogs.com/liuw-flexi/p/10745246.html

scala编程第16章学习笔记(1)

List列表的基本操作 head方法获得列表的第一个元素 tail方法获得列表除第一个元素之外的其它元素 isEmpty:判断列表是否为空,空的话返回真 last:获得列表最后一个元素 init:获得除最后一个元素之外的元素 reverse:反转…

struts

Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了…

css实现元素在div底部显示

#CSS .1 {position:relative;} .2 {position:absolute;left;0;bottom:0;} #HTML <div class"1"> <div class"2"></div> </div> 不影响其他元素的情况下定位最好...如果 DIV1 里 只有 DIV2 的话 在DIV2 CSS样式里 加一个 margin-to…

css文件修改后没变化 static_Go Web编程使用Go语言创建静态文件服务器

上篇关于Go模板库应用实践的文章最后我们留下一个问题&#xff0c;页面模板是通过 CDN引用的 BootStrap的 css&#xff0c; js文件。到目前位置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响应给客户端。使用和配置过 Nginx服务器的一定知道 Nginx天然支持…

【linux】学习2

鸟哥那本书的第6章 文件权限&#xff1a; ^ ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6 7 文件有 文件所有者、文件所属用户组 的概念如上图. 1. 十个字母表示文件…

IE 8 开发人员工具详解 【转载】

我的体会&#xff0c;IE 8 较之前面的的版本还是有不少改进的。使用体验上好很多&#xff0c;速度也不错。IE 要继续加油&#xff0c; 对于网页开发人员&#xff0c;IE8也提供了一个所谓的开发人员工具&#xff0c;通过F12可以调用出来 关于这套工具的使用细节&#xff0c;我就…

scrollwidth ,clientwidth ,offsetwidth 三者的区别

clientwidth:内容可视区域的宽度 offsetwidth:元素整体宽度 scrollwidth:实际内容的宽度 转载于:https://www.cnblogs.com/cuijin-book/p/10760656.html

python运算符与表达式

2019独角兽企业重金招聘Python工程师标准>>> 运算符用于连接两个相同类型的序列&#xff0c;s*n用于创建一个序列的n个副本。但是这些都是仅仅复制元素引用的浅复制。 例&#xff1a; a[3,4,5] b[a] c2*b 则c[[3,4,5],[3,4,5]] a[0]-7; 则c[[-7,4,5],[-7,4,5]]. 也…

3d翻转 ios_iOS自定义转场详解04——实现3D翻转效果

这是自定义转场系列的第四篇。由于具有一定的连续性&#xff0c;我会忽略一些基础&#xff0c;所以如果你是第一次看这个系列&#xff0c;可以先过目之前的几篇 ——— UIViewControllerTransitioning的用法 、实现Keynote中的神奇移动效果、实现通过圆圈放大缩小的转场动画。老…

[转]算术编码+统计模型=数据压缩 - 第二部分:统计模型

转自&#xff1a;http://deercrane.spaces.live.com/blog/cns!8BEF692B75EB8095!189.entry 算术编码 统计模型 数据压缩 - 第二部分&#xff1a;统计模型 &#xff08;撼庭秋译自http://compression.graphicon.ru/download/articles/ppm/nelson/arithmetic2.htm&#xff09; …