ke_jun
(kejun)
1
折腾了两天了,实在没辙了,来看看有无佬友给点思路?
事情是这样的,我撸了一个 py 项目,AI 自动生成视频,用到了 numpy、manim 等等一堆依赖(100+)
开始是部署到服务端(Docker)但是我的小机太拉了,最多同时跑两个进程就炸机,然后就想到做成客户端,说干就干。
到打包阶段了,试了 pyinstaller,很成功,问题:
- 启动巨慢,看 issues 用 onedir 模式,还是慢,不过可以加 splash 给用户提示,也能接受
- 但是!splash 不支持 MacOS,在我的老mac上要启动 40s+,然后没有任何提示,就只能死等(noconsole)
怎么办呢,换方案,nuitka 很多人吹,编译到c,速度飞起,赶紧一试,挖草,我那100+依赖,打了半个小时(32G + i713700)都没打完,这还咋调试,实在没耐心了用下去。
不考虑保护源码,要支持跨平台,还有啥思路呢,下面是我想到的?
- flet: 打包成 dart flutter,但是…
- zipapp:py 内置的一种 类似 jar ?,但是还得要客户安py呀
- inno setup:结合 zipapp 或 nuitka ,只打源码,在安装阶段下载 python embed 然后 pip 安装依赖,但是 macos 好像没类似的操作?
下面更新下我的折腾记录,希望有同样需求/困惑的有个参考
我是js佬,刚学py极其不专业,有表述错误的地方请谅解!
71 Likes
ke_jun
(kejun)
4
这就是绿色版py?,没提供打包方案,只提供了跨平台的 python 呀
2 Likes
sin
(笑红尘)
5
这么多包,有其他打包的能打包出来很小吗?是在虚拟环境下建的项目打包的吗?
ke_jun
(kejun)
7
不要求小,只要求不要太慢,或者启动有提示!
现在innosetup压缩完 不到200m,解压后不到600m
3 Likes
nameliu
(nameliu)
10
再写个新程序,专门用来显示提示,与原项目完全无关,仅仅显示提示
检查到启动成功就关闭这个程序?
1 Like
PyInstaller 真的是字面意义上的打包,相当于在 Python 的基础上有一层包装,必然会对性能有一定的影响,而且很容易逆向。
Nuitka 是我在用的目前最理想的方案,编译到 C,速度拉满,当然这种级别的编译自然相当耗费时间。不过通过恰当的配置,可以使 Nuitka 缓存已编译的依赖,后续再次编译时可以减少编译时间。
3 Likes
ke_jun
(kejun)
12
你猜为啥 macos 下的 pyinstaller 不支持 splash …
1 Like
ke_jun
(kejun)
14
踩过些坑了, 有装 ccache
我也尝试过把依赖注释掉,先打一部分缓存出来,但是还是太慢了…
1 Like
admini
(admini)
15
python 跨平台也可以 docker 啊。跟你服务器配置有什么关系啊。如果你要纯粹的客户端,兼容性没有那么好。而转 C 又没耐心。只有提供不同平台的一键安装脚本了。
1 Like
ke_jun
(kejun)
16
其他语言没有 manim 这种框架,我的核心依赖,不然我肯定用俺的 js 一把梭
3 Likes
youvy_lee
(youvy lee)
18
不是一个AI项目要给客户用么,用的话解压即用和打包成可执行程序没差吧,当然要做成商业可执行程序的话另说,看客户需要的提供形式了。佬说的脚本安装也是方式,当然如果解压即用能接受的话。。。
2 Likes
新建虚拟环境,只保留有必要的库,减少打包压力,不过有manim这类库估计也少不了多少依赖 
3 Likes