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

时间:2017-08-26 18:20:07

标签: python

很想知道是否有可能以完全解释的方式运行python程序,可以跳过编译

2 个答案:

答案 0 :(得分:3)

要完全回答这个问题,由于其含糊不清,需要比我有时间更仔细的回答,但需要记录:

  • CPython实现将源模块编译为字节码。
  • 导入模块时,解释器会查找已编译的字节码 文件比源更新,如果找到则使用它
  • 否则解释器会尝试编写模块的编译字节码 它将在未来的导入中找到 - 无法写入文件 不是错误。
  • 字节码由解释器的eval循环解释,而不是 翻译成机器代码。

其他实现具有其他特征。

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

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

Jython以Java虚拟机字节码为目标,许多JVM实现再次在每次运行的基础上应用JIT技术。

答案 1 :(得分:0)

假设指的是Python的默认实现 - CPython 您无法跳过编辑

运行命令时:

{{1}}

Python(在非常广泛和基本的意义上)执行以下步骤:

  1. Python首先解析您的代码文件。结果是抽象语法 树(a.k.a AST)。
  2. 然后将AST传递给Python编译器。 Python编译器 生成Python虚拟机的字节码。
  3. 然后虚拟机执行代码。
  4. 第二步在Python解释器过程中至关重要。没有它,你坚持使用AST,虚拟机无需执行任何操作。编译是一个必要的过程。它不是可选的,是强制性的