c 文件夹打包解包_Nuitka之乾坤大挪移-让天下的Python都可以打包

742b40d32e9c1436c3a88b0db428a571.png

我们的目标是:只要能运行的py,就一定能成功打包

上一篇文章《Python打包exe的王炸-Nuitka》反响很热烈,风扇顶不住的,打包一下午的,Golang秀优越感的,不够pyinstaller好欺负的,cxfreeze抽筋的都纷纷表示不服,Nuitka:这锅得你自己来背!!!

3140edc116821bc0642c22ba3924ad9c.png

老规矩先奉上视频(这次笔记本可以放心操作)

4b8a594aba3b693aa8f6f0f4c64c34e5.png
nuitka打包python成exehttps://www.zhihu.com/video/1239925017234051072

在你学完本篇秘籍之后,pyinstaller打包时代的顽固份子numpy cv2 keras scipy sklearn等,可以尽情地将它们按在地上来回摩擦了

c65d12a402af835a498f27fe12316c99.png

本着我的问题是我的,你的问题也是我的,bug才能改好。那么新问题来了:我的钱是我的,你的钱也是···ni de, 社会才能和谐

155acc2d2340cee57fe1975074fbdf9b.gif

别跑了,进入正题了,以下是一份常见PyQT5的import和文件夹内容,常规下都会打包到文件夹中去,绿色部分比如PyQT5,numpy,PIL,cv2,Tensorflow,Sklearn这些要是转换成C/C++意义不大,并且打包时间会延长到几个小时,风扇狂响,笔记本小概率上会撑不到新exe的到来(So we have to change)

669facb0d5a547c508882e9fb10600dc.png

e6a71307982d4b9b29e31a18d74ca027.png

从效率和反编译的角度来看,绿色的部分直接让打包好的exe文件夹内的python3x.dll来执行,不用去理会各个模块的版本依赖和江湖恩怨,实现高度自治

黄色部分是UI界面和数据库的连接以及函数和功能实现,需要加密和快速反应的,用户的体验就在这里,这部分借助Nuitka来实现。

如果能做到双兼顾,不得不说这是一个天才编程师的构思,接下来我们看看Nuitka提供的功能(CMD窗口输入 nuitka --help)

5a7359db6d9449992b5846fd4ca7dc73.png

5f815e91e3c9a6da4239e7ffe7e18804.png

以下是Nuitka的关键命令段

  • --nofollow-imports #所有的import全部不使用,交给python3x.dll执行
  • --follow-import-to=need #need为你需要编译成C/C++的py文件夹命名

文件修改前:

c2b813107813eed00e703badfaa174fc.png

修改后:

e93519a801bfeffc5115f29e74044f70.png

从视频中看Nuitka打包exe的时间和Pyinstaller基本上已经一样了,几分钟内就可以解决,复杂的程序不需要像Pyinstaller来回调试依赖版本和import的deep层级,难易程度不在一个级别。python能运行的Nuitka打包后照样运行

调试前的命令行(need为文件夹名称,可自行修改):

nuitka --standalone --mingw64 --show-memory --show-progress --nofollow-imports --plugin-enable=qt-plugins --follow-import-to=need  --output-dir=o 你的.py

调试后的命令行(need为文件夹名称,可自行修改):

nuitka --standalone --windows-disable-console --mingw64 --nofollow-imports --show-memory --show-progress --plugin-enable=qt-plugins --follow-import-to=need --recurse-all --output-dir=o 你的.py

这种结构的巧妙之处在于避开了pyinstaller经常不稳定的状况,比如numpy版本更新的太快,Scipy和Sklearn,Kearas还没有更新,或者彼此的版本差异导致的依赖出错,在pycharm或者VSCode运行时并不会报错,在exe模式下会报错导致打包一直无法成功,也使得pyinstaller的体验一直不怎么好

Pyinstaller的天生缺陷也注定密码和IP不能直接写入到PyQT中去,反编译不解决就不能上更高的台阶,Pyinstaller的历史作用也就仅此而已,Nuitka的优势因此显而易见

文末回答一个老生常谈的问题,Nuitka到底比Pyinstaller快多少?这里没有记录纸质数据,从大家的反馈总结来看,最少30%,最多150%。

重点是到目前为止Nuitka( 版本0.6.8rc5 )并没有做性能的优化,预计Nuitka1.0的正式版本性能比python版本exe最少提升80%

打包出现Bug的请私信截图或者在群内询问,公众号有入口;这里的评论我没法解决大家的提问。

下一篇文章我们继续聊Nuitka的优化和其他小技巧,敬请期待!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值