如何绕过编译阶段运行python程序

如何绕过编译阶段运行python程序,python,Python,我只是想知道,如果您引用的是python的默认实现-CPython,是否可以以完全解释的方式运行python程序,从而可以跳过编译您不能跳过编译 运行该命令时: python <script-name>.py python.py Python(在非常广泛和基本的意义上)执行以下步骤: Python首先解析您的代码文件。结果是一个抽象语法 树(又称AST) 然后将AST传递给Python编译器。Python编译器 为Python虚拟机生成字节码 然后虚拟机执行代码 第二步在Pyth

我只是想知道,如果您引用的是python的默认实现-CPython,是否可以以完全解释的方式运行python程序,从而可以跳过编译您不能跳过编译

运行该命令时:

python <script-name>.py
python.py Python(在非常广泛和基本的意义上)执行以下步骤:

  • Python首先解析您的代码文件。结果是一个抽象语法 树(又称AST)
  • 然后将AST传递给Python编译器。Python编译器 为Python虚拟机生成字节码
  • 然后虚拟机执行代码

  • 第二步在Python解释器过程中至关重要。如果没有它,您的应用程序将无法使用AST,虚拟机将无法执行任何操作。汇编是一个必要的过程。这不是可选的,这是强制性的

    要完全回答这个问题,由于它的模糊性,需要比我有时间做的更仔细的回答,但作为记录:

    • CPython实现将源模块编译成字节码
    • 导入模块时,解释器将查找编译的字节码 比源文件更新的文件,如果找到,则使用它
    • 否则,解释器将尝试编写模块的编译字节码 在将来的导入中可以找到它-无法写入文件 这不是一个错误
    • 字节码由解释器的
      eval
      循环解释,而不是 翻译成机器代码
    其他实现具有其他特征

    Python优化的pypypy实现使用JIT技术将Python编译成可执行的机器代码,但我不知道它是否试图缓存JIT-ed代码。我怀疑这样做是不明智的,因为每次运行的优化很可能不同

    IronPython实现编译成.NET CLR字节码,我相信可以对其进行进一步优化


    Jython的目标是Java虚拟机字节码,许多JVM实现都应用了JIT技术,同样是基于每次运行。

    Yes。。。打开REPL会话并编写代码。啊,提及其他Python实现是个好主意。我可能错误地认为OP只是指CPython+1人们通常是这样,但问题可能是缓存字节码或编译为机器码。