Python文件运行的流程

Python是一门解释性语言,python程序是顺序执行的,而C++之类的语言中main()是程序的入口
1、操作系统会首先让CPU把python解释器的程序复制到内存中
2、Python解释器根据语法规则,从上向下让CPU翻译Python程序中的代码
3、CPU负责执行翻译完成的代码
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

当Python运行脚本时,在代码开始进行处理之前,Python还会执行一些步骤。

1、字节码编译

程序执行时,Python内部会先将源代码编译成字节码的形式。编译是一个简单的翻译步骤,而且字节码是源代码底层的、与平台无关的表现形式。概括来讲,就是Python通过把每一条源代码分解为单一步骤来将这些源语句翻译成一组字节码指令。这些字节码可以提高执行速度。这个过程对于用户来说是完全隐藏起来的。

如果Python进程在机器上拥有写入权限,那么它将程序的字节码保存为一个以.pyc为扩展名的文件。Python这样保存字节码是作为一种启动速度的优化。下一次运行时,如果在上次保存字节码后没有修改过源代码,Python会加载.pyc文件跳过编译这一步。当Python必须重新编译时,它会自动检查源文件和字节码文件的时间戳。

如果Python无法再机器上写入字节码,程序仍然可以工作:字节码将会在内存中生成并在程序结束时丢弃。

执行模块的演变体。

1、Python实现的替代者

Python语言有三种主要的实现方式:CPython、Jython和IronPython以及一些次要的实现方式,如,Stackless Python。简单来说,CPyhton是标准的实现,其他的都是由特定目标和角色的。这些东西都是用来实现Python的,只是通过不同的方式执行程序罢了。

2、执行优化工具

CPython、Jython和IronPython都是通过同样的方式实现Python语言的,即通过把源代码编译为字节码,然后在合适的虚拟机上执行这些字节码。然而,其他的系统,包括Psyco即时编译器以及Shedskin C++转换器,则试着优化了基本执行模块。

a、Psyco实时编译器

Psyco系统并不是Python的另一种实现方式,而是一个扩展字节码执行模块的组件,可以让程序运行的更快。Psyco是一个PVM的增强工具,这个工具收集并使用信息,在程序运行时,可以将部分程序的字节码转换成底层的真正的二进制机器码,实现更快的执行速度。在开发过程中,Psyco无需代码的修改或独立的编译即可完成这一转换。

b、Shedskin C++转换器

Shedkin是一个引擎系统,它采用了一种不同的Python程序执行方法:它尝试将Python代码变成C++代码,然后使用机器中的C++编译器将得到的C++代码编译为机器代码

3、冻结二进制文件

有时候人们需要一个"真正的"Python编译器,实际上他们真正需要的是得到一种能够让Python程序生成独立的可执行二进制代码的简单方法。这是一个比执行流程概念更接近于打包分发概念的东西,但是二者之间或多或少有些联系。通过从网络上获得一些第三方工具,将Python程序转为可执行程序(在Python世界中称作冻结二进制文件)是有可能的

冻结二进制文件能够将程序的字节码、PVM以及任何程序所需要的Python支持文件捆绑在一起形成一个单独的文件包。过程会有些不同,但实际的结果将会是一个单独的可执行的二进制程序,这个程序可以很容易地向客户分发。

现如今,主要有三种系统能够生成二进制文件:py2exe(Windows下使用)、PyInstaller(和py2exe类似,它能够在Linux及Unix上使用,并且能够生成自安装的二进制文件)以及freeze(最初始的版本)。

冻结二进制文件与真实的输出结果有所不同:它们通过虚拟机运行字节码。因此,如果离开了必要的初始改进,冻结二进制文件和最初的源代码运行速度完全相同。冻结二进制文件并不小(包括PVM),但是以目前的标准来衡量,它们的文件也不是特别大。因为在冻结二进制文件中嵌入了Python,接收端并不需要安装Python来运行这些文件。此外,由于代码嵌入在冻结二进制文件中,对于接受者来说,代码都是隐藏起来的。

对商业软件的开发者来说,单文件封装的架构特别有吸引力。

4、其他执行选项:还有一些其他的方案可以用来运行Python程序,可以关注相关的网站来了解它们

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页