一、命令生成 pyc 文件

  • *.py:源码文件,由 Python 程序解释。
  • *.pyc:源码经编译后生成的二进制字节码(Bytecode)文件。
  • *.pyo:优化编译后的程序,也是二进制字节码文件。

虚拟机怎么执行py脚本:

  • 完成模块的加载和链接;
  • 将源代码翻译为PyCodeObject对象(这就是字节码),并将其写入内存当中(方便CPU读取,起到加速程序运行的作用);
  • 从上述内存空间中读取指令并执行;
  • 程序结束后,根据命令行调用情况(即运行程序的方式)决定是否将PyCodeObject写回硬盘当中(也就是直接复制到.pyc或.pyo文件中);
  • 之后若再次执行该脚本,则先检查本地是否有上述字节码文件。有则执行,否则重复上述步骤。

Python 在解释源程序时分为两步:

  • 第一步:将源码转为字节码
  • 第二步:将字节码转换为机器码

pyc 文件是由 Python 解释器将 模块的源码 转换为 字节码,下次运行程序的时候,就可以跳过 从源码到字节码 的过程,直接加载 pyc 文件。
(pyc,py代表pychon,c 是 compiled的含义,pyc即编译过的python文件 )

二、命令生成 pyc 文件

1.单个生成pyc文件:

1.1命令方式---生成pyc文件:

python -m py_compile test.py

或者

python -m compileall test.py 

把单个.py文件编译为字节码文件

1.2 脚本方式---生成pyc文件:

import py_compile
if __name__=='__main__':
    py_compile.compile('/path/to/test.py')#/path/to/代表脚本所在目录
其下的py_compile.compile(file[, cfile[, dfile[, doraise]]])可将.py文件编译生成.pyc文件(默认),对应的参数解释如下
  1. file,表示需要生成.pyc或.pyo文件的源脚本名(字符串);
  2. cfile,表示需要生成.pyc或.pyo文件的目标脚本名。此外,当且仅当所使用的解释器允许编译成.pyo文件,才能以“.pyo”结尾。这也就是为什么会在函数功能解释上加上“(默认)”这两个字的原因。
  3. dfile,表示编译出错时,将报错信息中的名字“file”替换为“dfile”。
  4. doraise,设置是否忽略异常。若为True,则抛出PyCompileError异常;否则直接将错误信息写入sys.stderr(什么!不知道sys.stderr?!温馨提示:sys.stderr是Python自带的标准错误输出)

二. 批量生成pyc文件:

1 命令方式---生成pyc文件:

python -m py_compile /path/to/          #批量生成字节码文件,/path/to/是包含.py文件名的路径

  或者 

python -m compileall /path/to/
#批量生成字节码文件,/path/to/是包含.py文件名的路径

2 脚本方式---生成pyc文件

import compileall
if __name__=='__main__':
compileall.compile_dir('/path/to')

三. 单个生成pyo文件

  1 命令方式---生成pyo文件:

python -O -m py_compile test.py

  或者

python -O -m compileall test.py

四. 批量生成pyo文件:

  1 命令方式---生成pyo文件:

python -O -m py_compile /path/to/

或者

python -O -m compileall /path/to/

或者

python -OO -m py_compile file.py
python -OO -m py_compile /path/to/
python -OO -m compileall file.py
python -OO -m compileall /path/to/

note:

  1.   -m参数相当于import,-m py_compile 相当于import py_compile,也即把后边跟随的库模块当做脚本运行。这样生成的字节码文件后缀名为.pyc文件。
  2.   -O参数表明要生成更加紧凑的优化后的字节码, 这样生成的字节码文件后缀名为.pyo文件。
  3.   -OO会进一步移除-O选项生成的优化后的字节码文件中的文档字符串,生成的文件后缀名仍然为.pyo文件。
  4. pyo文件也是优化编译后的程序(相比于.pyc文件更小),也可以提高加载速度。但对于嵌入式系统,它可将所需模块编译成.pyo文件以减少容量
  5.   注意不同版本编译后的pyc文件是不同的,比如3.4编译的pyc文件在3.3版本的python是无法执行的。

五、生成_pyc__文件夹

当我们的python文件被编译过,文件之间存在import关系,就会生成一个__pyc__文件夹。

  • 若你在命令行直接输入“python path/to/projectDir”(假设projectDir目录含有“__main__.py”文件,以及其他将要调用的模块),那么程序运行结束后便自动为当前目录下所有的脚本生成字节码文件,并保存于本地新文件夹__pycache__当中
  • 或者是,在命令行输入“python path/to/projectDir/__main__.py”,则生成除__main__.py外脚本的字节码文件。不过总的来说,上述这两种行为都大大缩短了项目运行前的准备时间。
  • 模块在每次导入前总会检查其字节码文件的修改时间是否与自身的一致。若是则直接从该字节码文件读取内容,否则源模块重新导入,并在最后生成同名文件覆盖当前已有的字节码,从而完成内容的更新(详见import.py)。这样,就避免了修改源代码后与本地字节码文件产生冲突。

python中的pyc和pyo文件和__pyc__文件夹的更多相关文章

  1. Python中使用第三方库xlrd来写入Excel文件示例

    Python中使用第三方库xlrd来写入Excel文件示例 这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表 ...

  2. Python是解释性语言吗? 直到看到有 python py、pyc、pyo、pyd 文件

    py是源文件,pyc是源文件编译后的文件,pyo是源文件优化编译后的文件,pyd是其他语言写的python库 1. Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去, ...

  3. python中的PYC文件是什么?

    1. Python是一门解释型语言吗? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言 ...

  4. Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别

    Python是一种面向对象.解释型计算机程序设计语言.Python 语法简洁.清晰,具有丰富和强大的类库.Python源代码遵循 GPL (GNU General Public License) 协议 ...

  5. Python中生成(写入数据到)Excel文件

      转自http://www.crifan.com/export_data_to_excel_file_in_python/ 在Python中,如何将数据,导出为Excel,即把数据写入到新生成的ex ...

  6. python学习之pyc,pyo,pyd文件

    pyc:二进制文件,python文件经过编译器编译之后的文件.可以提高文件加载速度. pyo:二进制文件,优化编译后的文件.可以通过`python -O file.py`生成. pyd:python的 ...

  7. Python中使用with语句同时打开多个文件

    下午小伙伴问了一个有趣的问题, 怎么用 Python 的 with 语句同时打开多个文件? 首先, Python 本身是支持同时在 with 中打开多个文件的 with open('a.txt', ' ...

  8. 在Python中使用moviepy进行视频剪辑时输出文件报错 ‘NoneType‘ object has no attribute ‘stdout‘问题

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 movipy输出文件时报错 'NoneType' ...

  9. py, pyc, pyw, pyo, pyd 及发布程序时的选择 Compiled Python File (.pyc)

    Python 程序扩展名(py, pyc, pyw, pyo, pyd)及发布程序时的选择 - 司开星的专栏 - CSDN博客 https://blog.csdn.net/chroming/artic ...

随机推荐

  1. Linux 重启php

    对于高版本PHP, 例如PHP 5.6, 重启PHP命令: service php-fpm restart 如果提示权限不足, 请使用: 1 sudo service php-fpm restart

  2. 论文翻译:Conditional Random Fields as Recurrent Neural Networks

    Conditional Random Fields as Recurrent Neural Networks ICCV2015    cite237 1摘要: 像素级标注的重要性(语义分割 图像理解) ...

  3. 【转贴】NUMA的取舍与优化设置

    NUMA的取舍与优化设置 https://www.cnblogs.com/tcicy/p/10191505.html 在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30 ...

  4. 剑指offer45:扑克牌顺子

    1 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话, ...

  5. Python基础(十一)--内置函数

    内置函数 数学类 abs():绝对值 round():四舍五入 >>> round(1.3747,1) 1.4 sum():求和 >>> sum({1:'dj',2 ...

  6. 17.tmux相关

    Linux终端复用神器-Tmux使用梳理 Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并运行tm ...

  7. Prometheus Operator 的安装

    Prometheus Operator 的安装 接下来我们用自定义的方式来对 Kubernetes 集群进行监控,但是还是有一些缺陷,比如 Prometheus.AlertManager 这些组件服务 ...

  8. docker-registry的定制和性能分析

    docker-index Web UI Meta-data 元数据存储(附注.星级.公共库清单) 访问认证 token管理 存储镜像.以及镜像层的家族谱系 没有用户账户数据 不知道用户的账户和安全性 ...

  9. 怎样设置Cookie

    因为 Cookie 是服务器保存在浏览器中的一小段信息, 因此这个设置应当是服务器发起的, 设置方法是在Response Header中添加: Set-Cookie字段, 值是多个键值对. 如下: / ...

  10. springcloud eureka注册中心分布式配置

    最近在学习springcloud,做下笔记以及记下遇到的坑. 1.建立maven工程,结构很简单,一个启动类和一个配置文件,结构如下图所示 2.启动类代码如下,需要添加注册中心注解:EnableEur ...