首页
社区
课程
招聘
[原创]使 Python 可编译
2014-5-24 08:46 13745

[原创]使 Python 可编译

2014-5-24 08:46
13745
使 Python 可编译

这个工具可以简称为 Python to GoLang,把 Python 源码自动转化为 Go 源码,然后可编译为独立的可执行文件。(附:Go语言是新兴的类C可编译语言,开源)

大家一般把 Python 理解为是一个脚本语言,虽然开发效率高,但运行速度慢,解释执行,不可编译,依赖解释环境,不方便发布。

多年以来,无数先烈做了大量的努力工作,试图提高 Python 的运行速度,有 pypy,Cython 等。但结果都不理想。

我认为:Python 实际上规定了一套开发规范。用这套规范,你可以快速地表达你的逻辑思想。它并没有限定必须是脚本语言,不可编译。只不过现在只有一个用C实现的 Python 解释器,简称 CPython。于是我们就想当然地认为,Python是脚本语言,不能编译。

我认为,一个软件,不管用什么编程语言,都是表达一些逻辑。它们之间应该是可以转化的。经过几个月的努力,就就有了现在的这个工具。

我的思想:Python 是开发效率最高的编程语言。无数天才的程序员都狂热地喜欢 Python 和 Go。现在有了本软件,使 Python 可编译,使 Python 可提速,Python 语言不再有缺点!从此我们再也不需要学 C 和 C++ 了!Python 获得了新生!

有人问,为什么要把 Python 转为 Go ,直接用 Go 开发不就行了?
首先,Python 开发效率极高,而 Go 为了简洁缺失很多有用的内容。我不建议把 Go 作为主开发语言。其次,Python 的第三方库非常丰富,而 Go 作为新兴语言,如果能把 Python 的所有库都继承下来,必大大提高 Go 的地位。

本软件有两种工作方式:
方式一:如果你的产品只在已安装 Python 的环境下运行,或者为了方便分析调试,可以用方式一。这时,只会转化主工程文件目录下的py文件。对于 import 的系统模块则不作转化处理。一般一行 Python 代码转化后变成 1.5 行 Go 代码。转化后代码清晰明了,基本保持原函数名,变量名,调用关系。方便再修改优化。
方式二:全转化。这会试图把所有 import 用到的系统模块全部转化为 Go 代码。这通常会产生超过十五万行 Go 代码。优点是这样转化后编译生成的可执行文件不再需要 Python 环境,单独一个 exe 加 python27.dll 加可能的 pyd 文件就可以运行了。方便发布。

有人说,你为什么需要 python27.dll ? 如果带 dll 的话,我一行 exec 就全解决了,何必这么麻烦呢?
如果用exec的话,还是解释执行的。达不到提速和安全的目的。
我的做法,是把每一个函数都变成一个对应的Go函数。每一个变量都变成一个对应的Go源码下的变量。我会尽量智能识别变量类型。如果发现变量是 integer 类型,就会直接使用 go 的 int ,优化了速度。对于不能识别的变量,或 list, tuple等,则用 PyObject ,对应的操作也只能调用 python27.dll 中的对应函数。
还有,Python 的一大优势是库非常丰富。大量的库实际上都是用C编译而来的 pyd 文件。这些pyd文件实际上是dll格式,它们依赖 python27.dll。

有了本软件的转化,大量的 python 库都可以在 go 下运行了。极大地丰富了 go 的功能。比如 go 至今没有好的 gui 库,现在就可以借用 Python 间接实现 gui 开发。

整个项目用了我多半年时间,约3万行代码。主要编程语言用 Python,辅以一些 Go 和 C 代码。如你所想,本软件可以转化自身。本软件的转化过程中,直接面对复杂的 Python 逻辑,把每一个知识点都要细致地从 Python 源码层转化为 PyObject层,再用 go 语言实现,工作量非常大。特别是一些 Python 中有而 Go 中没有的概念,处理起来非常有难度。比如 try/exception, yield, var scope, no use var, var declare等。

本项目准备以开源形式发布。源码稍后提供。暂只支持 Python 2.7.6 不支持 Python3。已经在 Win32,Win64 平台上测试通过。相信也可以很容易地运行在所有支持 Python 和 Go 的平台。Python 是用C实现且开源,Go也是用C实现且开源,几乎可以运行于所有平台。有了这个 Python to Go ,相信将来 Python+Go 会成为主流的开发方式。

作为本转化工具的第一个样例,一个我写的英语听力小工具
http://pan.baidu.com/s/1o6x5zRk 内有 Python 源码,和转化后的 go 源码 (17万行)。

现在可以提供的服务:
1。协助你把 Python 源码转化为可编译的 Go 源码。方便部署,更安全,运行速度更快。
2。协助你对 Python 项目优化提速。
3。演讲,传达我的思想。 9870365@qq.com

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (34)
雪    币: 2479
活跃值: (3479)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fujing 2014-5-24 09:01
2
0
源码稍后提供
雪    币: 2866
活跃值: (3412)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 5 2014-5-24 09:27
3
0
膜拜老刘
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
starshadow 2014-5-24 10:40
4
0
楼主真乃大神也!
雪    币: 523
活跃值: (827)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
笑熬浆糊 2 2014-5-24 11:23
5
0
对GO 完全不懂  PYTHON  我喜欢  楼主的东东 看上去 相当的霸道
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
快雪时晴 4 2014-5-24 11:50
6
0
LTT思如泉涌,这么些年来一直有创新的东西发布,每个都堪称经典,一直是俺膜拜之人。
雪    币: 3178
活跃值: (1450)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
lynnux 2014-5-24 11:59
7
0
刘大大研究的东西总是这么犀利,膜拜!
雪    币: 219
活跃值: (738)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 4 2014-5-24 12:34
8
0
e  帖子评价给低了,怎么会是优秀呢? 至少也应该是精华啊
雪    币: 1227
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
boywhp 12 2014-5-24 13:33
9
0
膜拜大神ing
雪    币: 29414
活跃值: (18625)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2014-5-24 13:34
10
0
项目准备以开源形式发布。源码稍后提供。


等源码来了再精华
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
crackhell 2014-5-24 13:59
11
0
厉害,真心佩服!!
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whnet 2014-5-24 14:09
12
0
赞美。好东西。
雪    币: 339
活跃值: (133)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
地狱怪客 2 2014-5-24 14:19
13
0
膜拜刘涛涛 学习
雪    币: 2122
活跃值: (358)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
疯子 4 2014-5-24 14:22
14
0
膜拜大神技术,但并不觉得可取,都是jit,还要预转换为GO语言再依赖后端,太蛋疼了,这样的话还不如使用LLVM。
雪    币: 2654
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 34 2014-5-24 14:32
15
0
又见老汪...  
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aait 2014-5-24 14:37
16
0
顶起。...
雪    币: 224
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kernel64 2014-5-24 15:07
17
0
20000多行python代码了,可称得上是涛哥力作
雪    币: 3229
活跃值: (1742)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
frmzero 2014-5-24 16:57
18
0
既然Go也开源,直接做个编译器也是可行的了?
雪    币: 249
活跃值: (135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
无心问世 2014-5-24 17:42
19
0
支持。。。。。。。。。。。
雪    币: 61
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小小笑儿 2014-5-24 17:49
20
0
哇哦,看看
雪    币: 52
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
cmds 2014-5-24 18:35
21
0
顶一下,这个之前也想过,后来其实觉得自己没这么高的性能需求,只是用了ABI做的Bindings,这么牛逼的东西一定要顶一下才行。
雪    币: 204
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
missdeer 2014-5-24 21:22
22
0
感觉得个蛋疼地快碎掉的东西。。。
雪    币: 230
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zrhai 2014-5-24 22:07
23
0
高大上啊~
最开始分析 dos 病毒的时候经常用老刘的 tr 调试器,佩服!
雪    币: 124
活跃值: (319)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
topofall 2014-5-24 22:42
24
0
期待楼主大神的源代码,小生菜菜特此膜拜
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
idoiter 2014-5-24 22:56
25
0
真乃神人也!!
游客
登录 | 注册 方可回帖
返回