既然Python是用C实现的,那为什么Python不能直接生成exe?
≛ℝ既然Python是用C实现的,那为什么Python不能直接生成exe?
C语言其实是一种比较“古老”而且“底层”的语言。其执行效率,仅次于汇编语言。
说其古老,是因为C语言的出现很早。
虽然Fortran、Cobol语言出现比C语言更早,但是现代主流操作系统(Windows、Mac Os、linux、iOS、Android、Unix)全部脱胎于C语言。
说它底层,是因为C语言设计之初就是为了同时编写汇编语言。理论上可以全部用汇编写。而汇编语言是执行效率最高的语言。
所以Python用C语言写一点也不奇怪。这和它能不能生成Exe一点关系都没有。
Exe文件是Windows平台的私有格式。最简单的Exe是Com可执行文件。Exe文件实际上是一个引导程序+一个解释程序组成的。
Python语言生成的代码,只需要配以引导程序和解释程序,就可以作为Exe文件执行。
所以,Python生成Exe文件一点难度都没有。只是它愿不愿意提供的问题。
ッ↑既然Python是用C实现的,那为什么Python不能直接生成exe?
Python是解释型语言,也可以打包成exe,只不过需要把解释器一起打包进去,所以打包出来的exe文件相对比较大一点。但是这完全不影响使用。我写了很多实用的小工具,用的wxpython写的GUI,用pyinstaller打包成exe只有十几M,用tkinter可以做到10M以内。打成exe是方便用户直接使用,不用自己装python环境了。现在一个安卓手机app几十几百M多的是,电脑还在乎这点空间?
▪◔既然Python是用C实现的,那为什么Python不能直接生成exe?
Python就不是干exe这活的,大街上有那卡车当公交车使的嘛!虽然都叫车,都有发动机和四个轱辘。卡车也能拉人,公交也能拉货。但毕竟都不是自己的设计初衷!没有万能的语言,只有合适的场景。每种编程语言的诞生,都是由它要解决的应用场景为初衷。Python设计的时候,已经有人能把exe这活干的很好,没必要去做重复的事。
★☄既然Python是用C实现的,那为什么Python不能直接生成exe?
我觉得你需要搞清楚一个概念,runtime. exe 只是一个壳子,exe 可以把整个just-in-time编译器和代码全部打包。看上去就是一个exe,但和你想象的exe不是一回事。程序分为三种,一种比如c,c++, rust,不需要JIT (just-in-time)编译器,不需要 runtime。第二种是不需要JIT 但需要runtime 比如 go, 它的gc 是runtime来实现的。第三种是需要JIT和runtime 比如java, .net, javascript, python 等等。JIT 的任务是产生中间代码,java 叫byte code, .net 叫 IL. 仅仅打包为 exe 不代表可以确定是三种中的任何一种。比如你把 .net 的exe 反编译,得到的代码甚至不是IL而是稍稍变了一点样子的源代码。我们知道机器是不需要函数名的,反编译看到函数名说明什么?说明本来打包为exe就没怎么动你的代码,仅仅是做了语法分析和linking,但是没有真正意义上向c++那样编译而产生机器执行指令。这一点来讲,java, .net, python, javascript 其实区别只是是不是強类型,没有哪个真正发布了“编译”,应该是 比compile 原始但比transcoding更复杂一点的那种事。
✡▕既然Python是用C实现的,那为什么Python不能直接生成exe?
这个当然没有问题,Python程序可以被编译成Windows可执行文件。
------------------
推荐阅读:
一初中学生有抑郁症,治疗患者的医生与家属不建议学生上学,但是患者却想上学,该怎么办?
下一篇: 金陵十二钗正册都有谁?