python源码只有编译成二进制_setup-cython(2):把Python打包成二进制应用吧

代码近过Cython化之后,安全性得到了提高,那么紧接着自然就会有一个不得不面对的事情,如何把我们写好的应用发布给别人呢?

Java可以直接打包成Jar、微软系的天生就能打包成exe,而Go则非常的舒服,go build一下,就解决问题了。在打包发布这方面,Python的工具链明显就没其他几家做的那么好。相信大家都经历过以下这么几个打包发布的阶段不要和我说什么打包,老夫就是一个源码包,丢到服务器就是一顿编译。生产环境当开发环境用,编译不过?不存在的。

直接丢到服务器编译太傻了,搞个virtualenv,整个虚拟环境拷贝走,服务器上有Python就行

Virtualenv?太麻烦了吧,看我PyInstaller直接打包,一个包就带走。(嘿,大哥,你的GLibC so文件漏了,应用起不来了)

setup-cython当然也需要解决这个问题,解决的方法是 Python->Cython->PyInstaller->StaticX

首先,我们依然保持把Python源码Cython化的原则,既可以保护源码,又可以获得至少30%~40%的性能提升。

第二步,我们会对应用进行PyInstaller打包,假如是Windows,到了这个步骤一般就可以了,直接把打包后的目录发布给别人就行,Python环境已经带上了

但是对于Linux系列可还差一步,我们使用PyInstaller打包出来的应用,直接搬到一个没有GLibc的系统上,可是会启动不来的,有那么一阵子小埋酱给实施小伙伴的建议是,却什么so就拷什么so走。但是这个工作量就非常的大了,要一个一个的对,可怜的实施小伙伴。

所以这一次小埋酱就没有采用这种手工的方法....(主要是想想还是挺累的)。在PyInstaller的FAQ里面瞄到了StaticX,这个工具是个非常不错的工具,能帮助我们把需要动态链接的内容都整合起来,最终打包成一个可执行的二进制包,所以,setup-python的最后一步就是使用StaticX打包成一个二进制包啦,打包后长这个样子

执行一下为了简单的测一下存在第三方库依赖的时候打包是否有问题,这行log是有logzero打出来的,看来并没有任何问题

接着小埋酱还特意花了一分钱的巨款,在阿里云上租了一个小时的抢占式实例,在一个没有装Python3,没有装GLibC的干净的Ubuntu下,执行依然没有什么问题哟https://github.com/himoutoumaru/setup-cython​github.com

那看来这个方案还是挺不错的,下一次尝试一下用setup-python来打包一个Flask项目,看效果如何

至此,Python也能做到和Go一样就发布一个二进制文件给使用者啦,开心

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值