1。pyinstaller和Nuitka的使用心得1.1需求这次也是因为项目的需要。找了半天,找到了两个可以打包python项目的工具——pyintaller和nuitka。这两个工具可以同时满足项目的需要:隐藏源码:这里的pyinstaller通过设置密钥对源码进行加密;而nuitka则是将python源码转成C++(这里是一个二进制的pyd文件,防止反编译),然后编译成可执行文件。移植方便:用户使用简单,无需安装任何python、第三方包等。1.2使用感受这两个工具使用后最大的感受就是:pyinstaller的体验很差!一个深度学习项目最终转换成的exe大小将近3G(pyinstaller将整个运行环境打包),是的,你没听错,一个EXE有3G!打包超慢,启动超慢。nuitka闻起来真香!同样的项目,生成的exe只有7M!打包超快(1分钟以内),启动超快。二、Nuitka的安装和使用2.1Nuitka的安装可以直接使用pip安装:pipinstallNuitka下载vs2019(MSVS)或者MinGW64,反正都是C++编译器,下载就行了。2.2使用过程对于第三方依赖较多的项目(如importtorch、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.icodemo.py这里简单介绍一下我上面的nuitka命令:--standalone:容易移植到其他机器,不用再安装python--show-memory--show-progress:显示整个安装的进度--nofollow-imports:不要编译代码中的所有imports,这样如keras、numpy等。--plugin-enable=qt-plugins:我这里的接口使用pyqt5,这里nuitka有对应的插件。--follow-import-to=utils,src:两个指定文件夹,包含需要编译成C++代码的源代码,以.分隔。--output-dir=out:指定输出路径为out。--windows-icon-from-ico=./logo.ico:指定生成的exe的图标为logo.ico。这里是一个将图片转换成ico格式文件的网站(Bitbug)。--windows-disable-console:运行exe取消弹框。不放在这里是因为我们还需要调试,可能会出现问题等等。编译1分钟后,在你的目录下可以看到:├─utils//源代码1文件夹├─src//源代码2文件夹├─out//生成的exe文件夹├─demo.build└─demo.dist└─demo.exe//生成的exe文件├─logo.ico//demo图标└─demo.py//主文件当然你会发现实际运行exe的时候会报错:noModulenamedtorch、cv2、tensorflow等都是第三方包,没有转成C++。这里需要找到这些包(我的在software\python3.7\Lib\site-packages下)复制(比如numpy、cv2文件夹)到demo.dist路径下。至此,exe可以完美运行!以上就是本次分享的全部内容。想了解更多python知识,请前往公众号:Python编程学习圈,发“J”免费领取,每日干货分享
