Skip to content

Nuitka的使用和技巧记录

Nuitka是一个用来打包python程序的东西,好处是它把程序用C编译了一次,所以运行速度会快很多,而且空间也没那么大了。

但是我看中文网上Nuitka的教程不多,而且质量,emmmmm,不知道是多少版本之前的了,和现在的Nuitka差距还是不小的;至于Nuitka的官方文档,只能说讲的很笼统,大部分功能还是得自己去尝试,所以我踩了几天的坑,打算记录一下踩了些什么东西。

第一个坑,--standalone,这个东西你看中文网上所有的教程,都是和你说,这个参数是分发的时候一定要加上的,给别人用的参数。在新版的Nuitka里面,这个参数就意味着一件事情,它会把你这个“环境”里面“所有的”包全部过一遍cython,好处是什么,你不用管需要导入哪些包了,反正它给你全包进去了,管你要不要用,它都放进去,无脑一次性解决;坏处显而易见,非常的大,而且慢。中文网络上解决这个问题是推荐使用--nofollow-imports并且手动管理需要的包,这个方法有一点用但是最新版里面这个参数被禁止和--standalone共用,所以你只能放弃--standalone

至于编译器,官方推荐gcc,这也是有原因的,第一是速度快,其次,Nuitka是一个基于C语言编译的,像msvc,也就是cl这种C++编译器其实不是很适合这个,最好的话还是使用gcc来编译。

然后就是--follow-import-to=这个参数,我一开始没怎么搞懂这几个参数的作用,后来我试了好几次,发现这个参数是用来指定同一个目录下面的文件夹的,有一些我们自己写的工具可能放在同一个文件夹下面的文件夹里面,这个时候就用这个参数来指定这一些文件夹,使其包含在里面。

--include-package这个参数就和之前的有一些区别就在于,--follow-import-to=是自己写的功能,而--include-package则是pip安装进来的东西,--include-package它会递归的将某一个模块和模块里面的东西全部包含进来,比如numpy和numpy.core,你只需要指定numpy就可以将它的所有子模块全部含进来,还是很方便的。

Published in技术探究

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注