【Python学习】python学习手册--第二章 Python如何运行程序

Python解释器简介

解释器是一种让其它程序运行起来的程序。当你执行一段Python程序时,Python解释器将读取程序,并按照一定的语法执行程序命令,得到结果。实际上,解释器是代码与机器的计算机硬件之间的软件逻辑层
当安装Python到计算机上时,计算机上就有了一个解释器和一些支持库。根据平台和具体情况的不同,解释器类型也会不同,但是最终要在一个平台上运行Python程序,那么它上面就必须拥有解释器

程序执行

Python程序的执行将从程序员和Python本身的视角来阐述:

程序员视角

大部分Python程序都是以.py结尾的,但是从技术上讲,只有要将该模块导入时,才是必须的。然而为了统一,所有的Python程序都以.py结尾。当执行一个文件时,就是让Python从头到尾,一部部执行Python程序中的语句。

Python视角

从程序员的角度来看Python程序的执行好像比较简便,但在执行程序之前,Python还会执行一些步骤:第一步是编译成为所谓的“字节码”,之后将其转发到所谓的“虚拟机”中执行。

  • 字节码编译
    执行程序时,源码会被编译成为字节码,字节码是平台无关的、源码底层的表现形式。简单的说,就是讲源码翻译成为对应的字节码指令,这些字节码指令的执行速度比源码要快得多。会注意到,如果Python有相应的权限,执行过的Python程序都会在同目录下生成.pyc文件,这就是相应的python程序翻译出来的字节码。这样保存字节码是为了下一次无修改时,提高运行速度(可以跳过编译步骤),当然,如果文件修改的时间戳更新了,就要重新编译源码文件了。
    同样的,该字节码也可以作为分发手段,在没有源码(.py)的情况下,也可以运行字节码文件(.pyc)
  • Python虚拟机(PVM)
    编译完成的字节码在PVM(Python virtual machine)中执行。这里才是Python解释器的最后一步。Python虚拟机的存在也是Python执行速度没有C/C++语言快的原因,虚拟机仍然需要解释字节码,而不是由芯片直接执行。
    【Python学习】python学习手册--第二章 Python如何运行程序
    以上过程当然对程序员来说都是不可见的,执行程序时,Python对于开发者来说,表现得就像“脚本”一样。
    Python不需要初始的编译阶段,所有的事情都是在运行时发生的,这还包括了建立函数和类的操作,以及链接模块

执行模块的变体

Python实现的替代者

Python实现主要是有三个主要实现方式(CPython,Jython和IronPython),以及其他一些次要的实现方式

  • CPython是最原始的、标准的Python实现方式,它有ANSI C语言代码编写而成。大部分的Python都是这个实现方式,包括LInux和Mac上自动安装的Python,官网上获取的版本。除非有特定需求,大部分场合都是CPython版本,它是速度最快,最完整也是最健全的。
  • Jython最初成为(JPython),也是Python的一种实现替代方式,其目的是为了与JAVA语言集成,它实现了Python与Java语言的无缝集成。Jython要比CPython慢而且不够健壮,它往往被当做java开发者的一个工具。
  • IronPython实现方式比以上两种都新,其目的是为了让Python程序与windows系统上的.net框架和Linux上开源的Mono编写的应用相集成。

执行优化工具

有一些优化工具可以优化Python基本执行模块。

  • Psyco系统是一个扩展字节码执行模块的组件。可以让程序执行的更快。
  • Shedskin C++转化器 是一个引擎系统,它采用了一种不同的方式运行python,它试图将Python代码转化成为C++代码来提高运行速度。

冻结二进制文件

在分发一个程序时,往往需要的是一个可执行的文件,这时,Python就需要转化为可执行程序(在Python世界中称作冻结二进制文件)。冻结二进制文件是把python字节码,解释器和Python所需要的支持文件捆绑在一起形成一个单独的文件包。
现如今,有三种工具可以冻结二进制文件,py2exe(windows系统下使用)Pyinstaller(linux系统下使用)freeze(最初始的版本)