文档章节

python脚本运行机制

一依木
 一依木
发布于 2017/05/23 14:54
字数 396
阅读 25
收藏 1

在说运行机制之前,先说以下四个文件各代表什么:

    .py    这个很简单是python脚本源码文件

    .pyc

          这个文件有点意思,得分几种情况来介绍:

              1、显式生成

                   python -m py_compile /path/.py

              2、隐式生成

                  2.1  a 模块 引用 自定义b模块,a模块运行后会生成b.pyc文件


python a.py

dir
|_____a.py  import b
|
|_____b.py
|
|_____b.pyc

                       

                  2.2  当源码目录包含__main__.py时,运行python 源码目录结束后,会将当前

                        目录下的所有脚本文件生成.pyc文件, 并保存于当前新文件夹__pycache__当中 。

python dir

dir
|
|___ __main__.py
|
|___ a.py
|
|___ a.pyc
|
|___ b.py
|
|___ b.pyc

        那么生成pyc文件有什么用处呢?最主要是提高模块加载速度,并实现源码隐藏及增加反编译的难度。

    .pyo

             此文件作用也是优化,相比较.pyc文件更小,加载速度更快点

            可以显示生成:

                  python -O -m py_compile /path/.py

    .pyd

           此文件是python动态链接库文件

 

简单来说python脚本运行基本步骤如下(整个过程都在虚拟机中完成):

    1、头部模块的加载及链接

    2、将源代码翻译成字节码,并将其写入内存

    3、从内存空间中读取指令并执行

    4、程序结束后,根据命令行调用情况决定是否将字节码写回硬盘当中

    5、之后若再执行该脚本,则先检查本地是否有该字节码文件,有则执行,无就重复以上步骤

 

 

© 著作权归作者所有

共有 人打赏支持
一依木
粉丝 0
博文 4
码字总数 1023
作品 0
黄浦
高级程序员
PHP和Python Ruby的运行机制区别

PHP和Python/Ruby的运行机制有一个本质区别:PHP是每次HTTP请求过来以后,初始化全部资源(例如创建数据库链接、加载系统类库,创建缓存等等),处理完毕,释放全部资源,这不像Python/Ruby...

被使用的文件
2015/11/03
0
0
zg手册 之 python2.7.7源码分析(5)-- python的作用域和名空间

在 python 中, module,作用域,名空间这几个概念与虚拟机的运行机制有紧密的联系, 这里先了解 module,作用域,和名空间,为后面分析虚拟机的运行做准备。 module 在python中一个文件对应...

东昕
2014/10/26
0
1
python中#!/usr/bin/python与#!/usr/bin/env python的区别

目的是在运行python脚本的时候告诉操作系统我们要用python解释器去运行py脚本 所以我们在第一句往往会写如下两句中的其中一句: 或 就是说在没有在执行程序时指出用什么程序运行py脚本时,系统...

p柯西
06/15
0
0
你真的了解Python吗?这篇文章让你了解90%

  【IT168 评论】人们为什么使用Python?   之所以选择Python的主要因素有以下几个方面:   软件质量:在很大程度上,Python更注重可读性、一致性和软件质量,从而与脚本语言世界中的其...

博客园
05/21
0
0
来自非专业Python讲师的一份Django考题,面试无忧!

Django的面试题少之又少,然而对于Python程序员又不得不掌握。 可以考察笔试者对于框架的理解和使用熟练度,展开了问,也可以问到很深的地方。 Django的Model的继承有几种形式,分别是什么?...

Python新世界
07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js的

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:forEach items="${topics}" var="item" varStatus="status"> </c:forEach> 注意 c:forEach E大写 varStatus ......

踏破铁鞋无觅处
28分钟前
0
0
带你走进java集合之ConcurrentHashMap

一、概述 上一篇文章《带你走进java集合之HashMap》分析了HashMap的实现原理,重点分析了HashMap是怎么样的一种数据结构,以及如何去插入,查询,扩容等操作。相信经过上一篇文章的学习,大家...

木木匠
29分钟前
1
0
spring-boot 热加载实现替换

参考资料 1、spring-boot 热加载实现替换

哎小艾
31分钟前
1
0
kotlin使用spring mvc(二)

使用FilterRegistrationBean注册Filter 使用WebFilter配置过滤器的缺点是不可以对过滤器进行排序,但是使用FilterRegistrationBean可以设置Filter执行的顺序 编写过滤器 class CustomFilter...

weidedong
32分钟前
0
0
Qt那些事0.0.5

碰到了中文乱码问题。 虽然是自己做了件令自己都不齿的事情,但是情急之下,暂且如此:将中文硬编码进代码中。 我也想通过tr+qm翻译进行转换,但是难过的是,tr之后,找不到或者不起作用。这...

Ev4n
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部