返回顶部
首页 > 资讯 > 后端开发 > Python >如何理解Python虚拟机中的Python运行环境
  • 345
分享到

如何理解Python虚拟机中的Python运行环境

2023-06-17 16:06:30 345人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

今天就跟大家聊聊有关如何理解python虚拟机中的Python运行环境,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。其实Python运行环境是一个全局性的概念,而执行环境实际就是一个

今天就跟大家聊聊有关如何理解python虚拟机中的Python运行环境,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

其实Python运行环境是一个全局性的概念,而执行环境实际就是一个栈帧,是Code Block对应的概念,两者之间存在着本质上的区别,在以后的运行操作过程中就可以了解到他们呢两者之间的不同。

运行时环境的初始化过程非常地复杂,后面将用单独的一章来剖析,这里假设初始化的动作已经完成,我们已经站在了Python虚拟机的门槛外,只需要轻轻推动一下***张骨牌,整个执行过程就像多米诺骨牌一样,一环扣一环地展开。

这个推动***张骨牌的地方在一个名叫PyEval_EvalFramEx的函数中,这个函数实际上就是Python的虚拟机的具体实现,它是一个非常巨大的函数,因此我们在列出其中的源代码时和以前有些不同。

PyEval_EvalFrameEx首先会初始化一些变量,其中PyFrameObject对象中的PyCodeObject对象包含的重要信息都被照顾到了。当然,另一个重要的动作就是初始化了堆栈的栈顶指针,使其指向f->f_stacktop:

[PyEval_EvalFrameEx in ceval.c]           co = f->f_code;       names = co->co_names;       coconsts = co->co_consts;       ffastlocals = f->f_localsplus;       ffreevars = f->f_localsplus + co->co_nlocals;       first_instr = (unsigned char*)PyString_AS_STRING(co->co_code);       next_instr = first_instr + f->f_lasti + 1;       stack_pointer = f->f_stacktop;       f->f_stacktop = NULL;   

前面我们说过,在PyCodeObject对象的co_code域中保存着字节码指令和字节码指令的参数,Python虚拟机执行字节码指令序列的过程就是从头到尾遍历整个co_code、依次执行字节码指令的过程。

在Python运行环境的虚拟机中,利用3个变量来完成整个遍历过程。co_code实际上是一个PyStrinGobject对象,而其中的字符数组才是真正有意义的东西。这也就是说,整个字节码指令序列实际上就是一个在C中普普通通的字符数组。因此,遍历过程中所使用的这3个变量都是char*类型的变量:first_instr永远指向字节码指令序列的开始位置;

next_instr永远指向下一条待执行的字节码指令的位置;f_lasti指向上一条已经执行过的字节码指令的位置。展示了这3个变量在遍历中某时刻的情形:

[ceval.c]      PyObject* PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)   {       ……       why = WHY_NOT;       ……       for (;;) {       ……       fast_next_opcode:           f->f_lasti = INSTR_OFFSET();           //获得字节码指令           opcode = NEXTOP();           oparg = 0;           //如果指令需要参数,获得指令参数           if (HAS_ARG(opcode))               oparg = NEXTARG();      dispatch_opcode:           switch (opcode) {           case NOP:               goto fast_next_opcode;           case LOAD_FAST:               ……           }   }

那么这个一步一步的动作是如何完成的呢,我们来看一看Python运行环境执行字节码指令的整体架构,其实就是一个for循环加上一个巨大的switch/case结构,熟悉windows SDK编程的朋友可以想象一下Windows下那个巨大的消息循环,就是那样的结构。在对PyCodeObject对象的分析中我们说过,Python的字节码有的是带参数的,有的是没有参数的,而判断是否带参字节码是通过HAS_ARG这个宏实现的。

注意,对不同的字节码指令,由于存在是否需要指令参数的区别,所以next_instr的位移可能是不同的。但是无论如何,next_instr总是指向Python下一条要执行的字节码,这很像x86平台上的那个PC寄存器。

Python在获得了一条字节码指令和其需要的指令参数后,会对字节码指令利用switch进行判断,根据判断的结果选择不同的case语句,每一条字节码指令都会对应一个case语句。在case语句中,就是Python对字节码指令的实现。

在成功执行完一条字节码指令后,Python运行环境的执行流程会跳转到fast_next_opcode处,或者是for循环处,不管如何,Python接下来的动作都是获得下一条字节码指令和指令参数,完成对下一条指令的执行。如此一条一条地遍历co_code中包含的所有字节码指令,最终完成了对Python程序的执行。

看完上述内容,你们对如何理解Python虚拟机中的Python运行环境有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网Python频道,感谢大家的支持。

--结束END--

本文标题: 如何理解Python虚拟机中的Python运行环境

本文链接: https://lsjlt.com/news/290735.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解Python虚拟机中的Python运行环境
    今天就跟大家聊聊有关如何理解Python虚拟机中的Python运行环境,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。其实Python运行环境是一个全局性的概念,而执行环境实际就是一个...
    99+
    2023-06-17
  • Ubuntu上如何管理Python虚拟环境
    在Ubuntu上管理Python虚拟环境可以使用以下步骤: 安装虚拟环境管理工具virtualenv: sudo apt-get...
    99+
    2024-04-28
    Ubuntu Python
  • python 虚拟环境详解
    目录pipenv 工作流1 .安装2.创建虚拟环境3.管理依赖4.pycharm设置虚拟环境总结pipenv 工作流 Pipenv是基于pip的Python包管理工具,它和pip的用...
    99+
    2024-04-02
  • python的虚拟环境
    什么是虚拟环境 python特有的一种软件环境,创建多个python环境,各个环境之间完全隔离,互不影响。它可以用来解决Python项目开发和运行过程中的依赖项和版本问题,而不必和其他项目的Python环境以及全局的Python环境发生冲...
    99+
    2023-01-31
    环境 python
  • 怎么理解Python的virtualenv虚拟环境
    这篇文章主要介绍“怎么理解Python的virtualenv虚拟环境”,在日常操作中,相信很多人在怎么理解Python的virtualenv虚拟环境问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Pyt...
    99+
    2023-06-02
  • 如何激活python虚拟环境
    如何激活python虚拟环境?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是...
    99+
    2023-06-14
  • python虚拟环境中如何使用virtualenv
    这篇文章主要为大家展示了“python虚拟环境中如何使用virtualenv”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python虚拟环境中如何使用virtualenv”这篇文章吧。virt...
    99+
    2023-06-02
  • 如何在Python中使用虚拟环境
    在Python中使用虚拟环境可以帮助您管理项目所需的依赖项,避免与系统中其他Python项目的冲突。以下是在Python中使用虚拟环...
    99+
    2024-05-10
    Python
  • Python 虚拟环境venv详解
    目录什么是虚拟环境一句话总结为什么要虚拟环境说下背景了解下第三方库的安装目录带来的问题通过 venv 操作虚拟环境创建虚拟环境激活虚拟环境关闭虚拟环境Pycharm 项目关联新创建的...
    99+
    2024-04-02
  • 解决Python虚拟环境virtual
     解决Python虚拟环境下不能使用sudo提升权限问题 问题描述 在虚拟环境下,执行某些命令需要有sudo提升权限,会导致该条命令退出虚拟环境: 如启动django 服务,需要监听80端口: $: python manage.py ru...
    99+
    2023-01-31
    环境 Python virtual
  • conda如何配置python虚拟环境
    这篇文章主要介绍“conda如何配置python虚拟环境”,在日常操作中,相信很多人在conda如何配置python虚拟环境问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”conda如何配置python虚拟环境...
    99+
    2023-07-05
  • python虚拟环境管理之virtual
    虚拟环境的作用 使python环境拥有独立的包,避免污染原本的python环境。为不同的项目创建不同的环境可以避免安装的库过于庞大和相互干扰。 例如你想在同一台机器上开发用python2和python3写的2个项目就可以用虚拟环境进行隔离...
    99+
    2023-01-30
    环境管理 python virtual
  • python运行环境如何配置
    要配置Python运行环境,你可以按照以下步骤进行操作: 下载Python:你可以从官方网站(https://www.pytho...
    99+
    2024-02-29
    python
  • cPanel虚拟主机上运行Python的
    有些做开发的朋友可能希望在cPanel虚拟主机上执行Python脚本,cPanel服务器默认python是装好的,一般位于/usr/bin/python目录下(可以通过whereis python命令确认下)。下面我们看下如何在c...
    99+
    2023-01-31
    虚拟主机 cPanel Python
  • Python学习之虚拟环境原理详解
    目录认识虚拟环境Python中的虚拟环境工具VirtualenvTreminal 终端演示该章节我们学习虚拟环境的相关知识,虚拟环境对于刚刚使用Python的初学者来说使用的概率可能...
    99+
    2024-04-02
  • chatgpt赋能python:如何查看Python虚拟环境?
    如何查看Python虚拟环境? 介绍 Python虚拟环境是一种常用的工具,用于创建Python环境的独立副本。通过使用虚拟环境,我们可以避免不同项目之间的依赖问题,并且可以保持每个项目的环境隔离。在...
    99+
    2023-09-12
    chatgpt python 开发语言 计算机
  • Python虚拟环境virtualenv是如何使用的
    了解虚拟环境 如果在一台机器上,想开发多个不同的项目,需要用到同一个包的不同版本,如果还使用上面的命令,在同一个目录下安装或者更新,其它的项目必须就无法运行了,怎么办呢? 解决方案...
    99+
    2024-04-02
  • Python中虚拟环境原理的示例分析
    这篇文章将为大家详细讲解有关Python中虚拟环境原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。认识虚拟环境在我们平时的工作环境中,可能会存在一台电脑存在多个版本的 python 的情况 。...
    99+
    2023-06-29
  • Python虚拟环境的原理及使用
    本篇内容介绍了“Python虚拟环境的原理及使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 为什么使用虚拟环境虚拟环境为一系列潜在问...
    99+
    2023-06-16
  • Python虚拟环境迁移如何实现
    本篇内容介绍了“Python虚拟环境迁移如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用python开发脚本使用的时候难免会遇到需...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作