python程序是如何运行的?

python程序是如何运行的?

解释器:让其他程序运行起来的程序,是代码与机器的计算机硬件之间的软件逻辑层。Python也是一个名为解释器的软件包。

python程序在解释器上执行分两个过程:

编译:如果Python进程在机器上拥有写入权限,那么它将把程序的字节码保存为一个以.pyc为扩展名的文件。当程序运行后,你会在那些源代码的附件(也就是说同一个目录下)看到这些文件。Python这样保存字节码是作为一种启动速度的优化。下一次运行程序时,如果你在上次保存字节码之后没有修改过源码的话,Python将会加载.pyc文件并跳过编译这个步骤。当Python必须重新编译时,它会自动检查源文件和字节码文件的时间戳:如果你又保存了源代码,下次程序运行时,字节码将自动重新创建。

执行:当程序编译成字节码,之后的字节码发送到通常称为Python虚拟机(Python Virtual Machine,简写为PVM)上来执行。它不是一个独立的程序,不需要安装。PVM是Python的运行引擎,它时常表现为Python系统的一部分,并且是实际运行脚本的组件。从技术上来讲,它才是Python解释器的最后一步。(事实上,PVM就是迭代运行字节码指令的一个大循环,一个接一个的完成操作)。

 

tips:Python字节码不是机器的二进制码(例如,Intel芯片的指令)。字节码是特定于Python的一种表现形式。这就是Python代码无法运行得像C或C++代码一样快的原因。PVM循环仍然需要解释字节码。并且字节码指令与CPU指令相比需要更多的工作。

解释器位于操作系统什么位置(Linux/Unix)?

Where Does Python Live on my Mac?

执行Python程序的解释器类型系统都有哪些?

python语言的三种主要实现方式。最快最完整最健全。
  • CPython:标准的实现。
  • Jython:目的是为了与Java语言集成。Jython包含了Java类,这些类编译Python源代码、形成Java字节码,并将得到的字节码映射到Java虚拟机(JVM)上。
  • IcronPython:它替换了图2-2中最后的两个方框,将其换成.NET环境的等效执行方式。并且就像Jython一样,IcronPython有特定的目标:主要为了在.NET组件中集成Python的开发者。
  • Cython:(基于Pyrex项目所完成的工作)是一种混合的语言,它为Python代码结合了调用C函数以及使用变量、参数和类属性的C类型声明的能力。
  • Stackless Python:标准CPython实现的一个变体,不会在C语言调用栈上保存状态。这使得Python更容易移植到较小的栈架构中。

优化Python程序执行效率的工具?

Psyco:是一个PVM的增强工具,这个工具收集并使用信息,在程序运行时,可以将部分程序的字节码转换成底层的真正的二进制机器代码,从而实现更快的执行速度。在理想的情况下,一些通过Pysco优化的Python代码的执行速度可以像编译好的C代码一样快。所有Pysco往往被看做是一个即时编译器(JIT)。

Shedskin C++转换器:Shedskin是一个引擎系统,它尝试将Python代码变为C++代码,然后使用机器中的C++编译器将得到的C++代码编译为机器代码。

Python程序是如何分发打包的?

冻结二进制文件:能够将程序的字节码、PVM(解释器)以及任何程序所需要的Python支持文件捆绑在一起形成一个单独的文件包。实际的结果是一个单独的可执行的二进制程序(例如,Windows系统中的 .exe文件),这个程序可以很容易地向客户分发。这就好像将字节码和PVM混合在一起形成一个独立的组件。

主要有三种系统能够生成冻结二进制文件:

  • windows:py2exe
  • Linux/Unix:PyInstaller,freeze

猜你喜欢

转载自blog.csdn.net/c710473510/article/details/88929353