• 第二章 Python运行程序


    一、Python解释器

     解释器是什么:

      是一种可以让其他程序运行起来的程序

    Python解释器:

      Python也是一个名为解释器的软件包,当编写了一段Python程序,Python解释器将读取程序,并按照其中命令执行,得出结果。Python代码必须在解释器中运行。

    Python包:

      Python包安装在机器上后,包含了一些最小化组件:一个解释器和支持的库。

    Python解释器的执行:

      根据使用情况的不同,Python解释器可能采取可执行程序的形式,或是作为链接到另一个程序的一系列库【不是很理解,链接是指被另一个模块文件引用吗】

    Python解释器的实现形式:

      根据Python版本的不同,解释器本身可以用C程序实现,或一些Java类实现,或其他形式。

    二、Python文件

    可以使用任何编辑器编写python语句,按照惯例,Python文件是以.py结尾的。从技术角度看,这种命名方案在被import时才是必须的【如果这个文件不需要被其他python导入,命名时不加后缀.py也是可以的】;但是为了统一,绝大多数Python文件都是以.py结尾的。

    三、程序的执行过程

    (一)字节码编译

    编译:

      程序执行时,python内部先将py文件中的语句【源代码】编译成字节码。


    字节码是什么:

      每一条python语句翻译成一组字节码指令


    字节码的好处:

      比起源代码,字节码的运行速度快得多

    字节码的存在形式【.pyc文件】:

      如果python进程在机器上【电脑】拥有写入权限,当程序运行后,在py文件的同级目录下可以看到一个.pyc文件,这里面即是py文件的字节码

    保存.pyc文件的好处:

      可以优化启动速度。如果py文件没有修改过,那么下次运行同一文件的时候,python会跳过编译步骤,直接加载.pyc文件。

    如果源文件修改了,第一次保存的pyc文件还有用吗:

      python第二次运行同一程序时会自动检查源文件和字节码的时间戳。如果又保存了源文件,python检查到时间戳不一致,这时运行程序,会自动重新创建字节码【重新进行了编译过程】

    如果没有.pyc文件,字节码存在于哪里:

      如果python无法在机器上写入字节码,字节码将会在内存中生成,并在程序结束时丢弃。

    在大型程序中,最好保证python进程拥有机器的写入权限。因为字节码文件也是分发python程序的方式之一:如果python找到的都是pyc文件,同样可以运行程序,即使这个目录下面没有py源文件

    字节码与二进制代码:

      Python字节码不是机器的二进制代码, 它是特定于Python的一种表现形式。

      Python代码无法运行得像C或C++一样快,因为PVM仍需要解释字节码,字节码指令与CPU指令【机器码】相比需要更多的工作

    (二)python虚拟机【PVM】

    虚拟机的工作:执行字节码

      程序编译成字节码或者字节码从已存在的.pyc文件中载入,之后,字节码发送到python虚拟机上执行。

    PVM是迭代运行字节码指令的大循环,一个接一个完成操作【手动问号,不是很理解】

    PVM时常表现为python系统的一部分,是实际运行脚本的组件。从技术上讲,它是所谓“python解释器”的最后一步

    (三)Python具有动态语言特性

    Python的编译和PVM的解释都是在程序运行时发生的,而对于静态语言,编译、链接都是发生在程序执行之前。这是运行Python程序和运行其他静态语言的不同之处。所以,Python带来了更加动态的编程体验。

    四、Python实现的替代者

    Python有3种主要实现方式:CPython、Jython、IronPython。CPython是标准的实现,其他的都是有特定目标和角色的。

    Python的一些次要实现形式,如Stackless Python。

    所有的这些实现方式都只是用来实现Python语言的,只是通过不同的形式执行程序。无论哪种实现形式,编写python文件时,Python语句都是一样的。

    这些实现方式都是通过把源代码编译成字节码,然后在合适的虚拟机上执行这些字节码。

    (一)CPython

    CPython:

      原始的、标准的Python实现方式通常称作CPython

      CPython是由可移植的ANSI C语言代码编写成的,所以取名CPython

    哪里获取CPython:

      从http://www.python.org获取的、或者大多数电脑上预装的Python,都是CPython

    什么时候用CPython:

      除非希望使用Python脚本化Java或.NET,其他时候都用CPython

    (二)Jython

    Jython:

      Jython最初称JPython,目的是为了与Java编程语言集成。

      Jython包含了Java类,这些类编译Python源代码,形成Java字节码,将得到的字节码映射到Java虚拟机【JVM】上。

    Jython的目标:

      Jython的目标是为了让Python代码能够脚本化Java应用程序,就像CPython允许Python脚本化C和C++组件一样。

      它实现了与Java的无缝集成。Python代码被翻译成Java字节码后,在运行时看起来就像一个真正的Java程序一样。

    Jython脚本的应用:

      Jython脚本可以应用于开发web applet和servlet,建立基于Java的GUI。此外,Jython允许导入Python代码或使用Java的类【这些类就像是用Python编写的一样】

      因为Jython比CPython慢而且不够健壮,它往往被看做Java开发者的一个有趣工具,面向寻找Java代码前端脚本语言【没读懂】

    (三)IronPython

    IronPython:

      IronPython比Cpython和Jython要新,其设计目的是让Python程序可以与Windows平台的.NET框架以及与之对应的Linux上开源的Mono编写的应用集成

      本着像微软早期的COM模型一样的精神,将.NET和C#程序语言的运行系统设计成与语言无关的对象通信层。

      IronPython既可以用作客户端,也可以用作服务器端的组件,还可以与其他.NET的语言进行通信

    五、执行优化工具

    Psyco即时编译器、Shedskin C++转换器优化了基本执行模块

    (一)Psyco即时编译器

    Psyco:

      是一个扩展字节码执行模块的组件,可以让程序运行得更快。

      Psyco是一个PVM的增强工具,可以收集并使用信息,在程序运行时,将部分程序的字节码转换成底层的二进制机器码,从而实现更快的执行速度。

      通过使用Psyco即时编译器,程序运行得更快。理想情况下,一些通过Psyco优化的Python代码的执行速度可以像编译好的C代码一样快。

      因为字节码的转换与程序运行同时发生,所以Psyco被看做一个即时编译器【JIT】

    Psyco提速程度:

      据官方网站介绍,Psyco提供了“2-100倍的速度提升,典型值为4x”

    (二)Shedskin C++转换器

    Shedskin:

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

      它以一种平台无关的方式来运行Python代码。

      初步结果显示Shedskin具有比标准的Python代码及使用Pyscho扩展后更快的执行速度的潜质。

    六、冻结二进制文件

    冻结二进制文件:

      有时候,需要一种能够让Python程序生成独立的可执行二进制代码的简单方法。

      python程序被转换成可执行程序后被称作冻结二进制文件Frozon Binary

      冻结二进制文件能够将程序的字节码、PVM【解释器】及任何程序所需的Python支持文件捆绑在一起,形成一个单独的文件包。过程可能会不同,但实际的结果将会是一个单独的可执行二进制程序[如Windows中的.exe文件]

    可以生成冻结二进制文件的工具:

      py2exe:在Windows下使用。py2exe可以封装使用了tkinter、PMW、wxPython和PyGTK GUI库的独立程序;应用pygame进行游戏编程的程序;win32com客户端的程序等。

      PyInstaller:和py2exe类似,它在Linux及Unix上使用,并且能够生成自安装的二进制文件以及freeze[最初始的版本]

    冻结二进制文件与真实的编译输出结果有所不同:

      它们通过虚拟机运行字节码。

      因此,如果离开了必要的初始改进,冻结二进制文件和最初的源代码程序的运行速度完全相同。

      冻结二进制文件并不小[包括PVM],但是以目前的标准来衡量,它们的文件也不是特别大。

    冻结二进制文件的运行:

      冻结二进制文件中因为嵌入了Python,所以接收端不需要安装Python就可以运行这些冻结二进制文件。

      由于代码嵌在冻结二进制文件中,对于接收者来说,代码都是隐藏的。这点对于商业软件开发者来说,是特别有吸引力的。例如,一个Python编码的基于tkinter工具包用户界面可以封装成一个可执行文件,并且可以作为一个CD中或网络上独立的程序进行发售。

      而终端用户无需安装Python去运行这些发售的程序

  • 相关阅读:
    手机自动化
    记录
    Linux 死机了怎么办
    前端源码
    LNMP环境
    PHP学习之路(一)
    py
    蜘蛛问题
    mongodb
    【HTML/XML 2】XML基础知识点总结
  • 原文地址:https://www.cnblogs.com/come202011/p/12788744.html
Copyright © 2020-2023  润新知