文档章节

python脚本运行机制

一依木
 一依木
发布于 2017/05/23 14:54
字数 396
阅读 28
收藏 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
黄浦
高级程序员
私信 提问
脚本类语言才有的概念是什么?

其实语言只是工具,很多思想是类似的。由于我从没用过脚本类语言,如Python。想请教一下跟编译型语言的不同是什么?我不想听到运行机制不同和Python有字典结构之类的,我想听到脚本语言特性之...

Vek_lip
2014/03/28
479
11
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
007-041-越写越快乐之Vyper开发环境搭建

今天的越写越快乐系列文章为大家介绍Ethereum官方开发的一种智能合约语言Vyper,它目前是一个实验实质的语言。 语言特点 Security Language and compiler simplicity Auditability 环境要求 ...

韬声依旧在路上
06/28
0
0
你真的了解Python吗?这篇文章让你了解90%

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

博客园
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Deepin 安装wireshark抓包工具

一、关于deepin和wireshark deepin目前已经发展到15.8了,开发Android毫无压力,在四个月的使用时间里,已经非常习惯了。目前想处理一些网络问题,因此尝试在deepin上安装一个抓包工具。dee...

IamOkay
24分钟前
4
0
Docker镜像仓库服务-Nexus

建立云原生集群系统,建立自己的私有Docker镜像仓库必不可少。一方面可以加快多节点部署容器镜像的下载速度,另一方面是为了安全(容器里存储有系统所有的信息、包括密码、数据库等等,切记不...

openthings
36分钟前
1
0
127.0.0.1 和 0.0.0.0 地址的区别

1. IP地址分类 1.1 IP地址表示 IP地址由两个部分组成,net-id和host-id,即网络号和主机号。 net-id:表示ip地址所在的网络号。 host-id:表示ip地址所在网络中的某个主机号码。 即: IP-a...

华山猛男
今天
21
0
解决Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle.

把 总项目 下的 build.gradle 中的 两个 jcenter() 用 maven{ url ‘http://maven.aliyun.com/nexus/content/groups/public/’} 代替。...

lanyu96
今天
6
0
基于redis的分布式锁

redisson提供了基于redis的分布式锁实现方式,本文就尝试了下锁的使用方式。Redisson同时还为分布式锁提供了异步执行的相关方法,第二节执行介绍。 一、可重入锁验证 同一个jvm里面同一线程的...

noob_chr
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部