程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python虚拟机运行原理及加载流程(虚拟机配置python环境)

hfteth 2025-03-29 17:47:52 技术文章 7 ℃

Python是一种半编译半解释型运行环境。理解Python运行环境对后续很多问题将会有很深刻的理解.

首先,Python虚拟机会在模块 "载入" 时将源码编译成字节码 (ByteCode)。然后,这些字节码会被虚拟机在一个 "巨大" 的核心函数里解释执行。这是导致 Python 性能较低的重要原因,虽然现在有了内置 Just-in-time 二次编译器的 PyPy 可供选择。(Pypy 使用即时编译(JIT)技术,可以在运行时将 Python 代码动态地编译成机器码,从而提供更高的执行速度)

当Python虚拟机开始运行时,它通过初始化函数完成整个运行环境设置:

  1. 创建解释器和主线程状态对象,这是整个进程的根对象。
  2. 初始化内置类型。数字、列表等类型都有专门的缓存策略需要处理。
  3. 创建 __builtin__ 模块,该模块持有所有内置类型和函数。
  4. 创建 sys 模块,其中包含了 sys.path、modules 等重要的运行期信息。
  5. 初始化 import 机制。
  6. 初始化内置 Exception。
  7. 创建 __main__ 模块,准备运行所需的名字空间。
  8. 通过 site.py 将 site-packages 中的第三方扩展库添加到搜索路径列表。
  9. 执行入口py 文件。执行前会将 __main__.__dict__ 作为名字空间传递进去。
  10. 程序执行结束。
  11. 执行清理操作,包括调用退出函数,GC 清理现场,释放所有模块等。
  12. 终止进程。

不知道大家有没有注意到, Python在获取一个没有定义的变量值时候, 报错信息是NameError, 而不是和其他语言一样, 错误为变量未定义或者undefind, 如下图:

这其实和Python虚拟机加载原理有很大关系, 主要是上边第7步名字空间有关.由于本节内容主要是将Python虚拟机, 因此名字空间的内容放到后续单独出一篇文章讲解, 请关注后续更新.

#挑战30天在头条写日记#

Tags:

最近发表
标签列表