有时候在python代码运行结束后会产生pyc文件,有时候又不会产生。那么,到底什么时候会产生?以及pyc文件到底起什么作用?进行了梳理和总结。

首先,了解python程序的运行过程
python程序的运行依赖于解释器(interpreter)。

Python解释器(interpreter)在执行任何一个Python程序文件时,首先进行的动作都是先对文件中的Python源代码进行编译,编译的主要结果是产生一组Python的字节码(byte code),然后将编译的结果交给Python虚拟机(Virtual Machine),由虚拟机按照顺序一条一条地执行字节码,从而完成对Python程序的执行动作。

pyc文件是什么
对于Python编译器来说,PyCodeObject对象是其真正的编译结果,PyCodeObject对象保存在内存中。在程序运行结束时,会根据规则决定是否将PyCodeObject对象写回硬盘,如果写回硬盘,就会生成pyc文件,所以,pyc文件只是这个PyCodeObject对象在硬盘上的表现形式。

什么时候会产生pyc文件
假如我们写一个简单的python程序:
test_pyc.py

print(“hello pyc”)
python3 test_pyc.py运行程序,发现并没有生成pyc文件。

那么如何生成pyc文件呢,可以使用命令python -m compileall -b .来生成pyc文件,会在和py文件对应的目录下生成pyc文件。

pyc文件有什么作用
pyc文件是由.py文件经过编译后生成的字节码文件,其加载速度相对于之前的.py文件有所提高,而且还可以实现源码隐藏,以及一定程度上的反编译。因此,不同版本的python可能运行不了同一个pyc文件。

一、编译生成pyc:
(1)单个文件
>>import py_compile
>>py_compile.compile(r'H:/game/test.py')
(2)多个文件
>>>import compileall
>>>compileall.compile_dir(r'D:\test')
(3)直接通过命令来运行,可以看到下面的命令中并没有用到compile()函数,
这是因为py_compile模块的main()函数中调用了compile().
python -m py_compile test.py
python -O -m py_compile test.py
-O 优化成字节码
-m 表示把后面的模块当成脚本运行
-OO 表示优化的同时删除文档字符串如果你想看compile(), compile_dir(), compile_path()具体每个参数是干吗用的,可以使用printpy_compile.compile().__doc__来查看,或者直接打开py_compile.py,compileall.py文件来看。
二、运行Pyc
>>> Python test.pyc
三、测试
'''
假设我们的文件夹下,只有文件Test.pyc,这个文件是将Test.py文件编译而得。但是这个文件需要调用文件Gl.py,先不将Gl.py转为Gl.pyc文件。
执行下面命令:
'''D:\A\B\__pycache__>python Test.pyc
'''
出现如下错误
Traceback (most recent call last):File "D:\A\B/Test.py", line 43, in <module>from GL import GL
ModuleNotFoundError: No module named 'Gl'
原因就是GL.py没有转成Gl.pyc文件。
将Gl.py转换后,执行命令,
'''D:\A\B\__pycache__>python Test.pycElement        Delta h           Max error          Rate5               0.2           1.658E-0310               0.1           4.338E-04         1.9346720              0.05           1.080E-04         2.0064340             0.025           2.697E-05         2.0014380            0.0125           6.747E-06         1.99889D:\A\B\__pycache__>

Python+pyc文件编译和运行相关推荐

  1. python pyc文件解析_如何反编译pyc文件

    如何将.pyc和.pyo文件反编译为.py文件 pyc大约在python2刚出的时候有.后来就很少找得到了.有一次,不小心把.py删除了,通过pyc还把代码还原了. 你搜索uncompyle2, de ...

  2. python pyc文件使用_py,pyc,pyw文件的区别和使用

    熟悉python编程的都知道,python三种最常见的py文件格式,.py,.pyc,.pyw,下面说一说它们各自的使用. py文件 python最常见的文件,是python项目的源码: 文件执行时l ...

  3. Python pyc文件 bytecode的压缩, 加壳和脱壳解析

    我们常常看到, 自己用PyInstaller等库打包的exe被别人反编译.而源代码在exe文件中是以字节码形式存储的.掌握了字节码的加密技巧, 就可以防止源代码的反编译. 目录 1.字节码是什么 2. ...

  4. ts文件编译与运行,vscode自动编译

    ts文件编译与运行 根据官方文档提示,ts文件无法直接运行,需要编译成js文件. 1.那么问题就来了,如何把ts文件编译成js文件呢? 官方文档说,Visual Studio 2017和Visual ...

  5. Python Pyc文件

    c 是 compiled 编译过的意思 pyc文件是由Python解释器将模块的源码 转换为字节码 Python 这样保存字节码是作为一种启动 速度的优化 字节码 Python在解释源程序是分成两个步 ...

  6. python pyc文件是啥_python pyc文件

    这么编译: >>> import py_compile >>> py_compile.compile(r'test2.py') 这么运行: MacBook-Air: ...

  7. python pyc文件是啥_什么是.pyc文件

    Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在. 如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊! 为了防止其他学习Pyt ...

  8. python pyc文件解析_pyc文件

     code object¶ 在我们导入 python 脚本时在目录下会生成个一个相应的 pyc 文件,是pythoncodeobj的持久化储存形式,加速下一次的装载. 文件结构¶ pyc文件由三大部 ...

  9. python pyc文件作用_Python中pyc文件的用途

    什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的 ...

最新文章

  1. 【Postgresql】触发器某个字段更新时执行,行插入或更新执行
  2. 一个LabVIEW控件,生成模拟波形效果
  3. hibernate操作mysql中文乱码
  4. Linux设置SSH登录(SecureCrt)
  5. 美国知名华人学者陈刚被捕,他出身贫寒,是一个不折不扣的工作狂
  6. Collection中list集合的应用常见的方法
  7. 获取Access表字段类型的自定义函数
  8. 蓝桥杯第六届国赛JAVA真题----密文搜索
  9. 【医院综合管理专题】医院服务质量管理制度与规范
  10. python面试题之如何解决验证码的问题,用什么模块,听过哪些人工打码平台?
  11. maven生命周期入门
  12. saltstack安装使用
  13. rmi 反序列化漏洞_Java反序列化漏洞自动挖掘方法
  14. freertos demo2: LED blinky queue 发送消息
  15. USB转TTL、USB转RS232的实现
  16. 2021年中国异戊酰氯市场趋势报告、技术动态创新及2027年市场预测
  17. 区块链投资入门篇—骨灰版
  18. 【机器学习之模型融合】Voting投票法简单实践
  19. dsf 实现各种排序
  20. 重拾Activity(三)Activity知识

热门文章

  1. (6)Air Band数字图像处理基础-对图像进行几何变换
  2. visio2002无法安装(您必须首先安装Enterprise Architect Edition of visual Studio.Net2003)的解决方案
  3. oracle安装缺少依赖包,ORACLE 安装提示缺少依赖包
  4. V型测试,W型测试和H型测试
  5. 500内部服务器错误。你查找的资源存在问题,因而无法显示
  6. Flutter 保护你的APP数据安全
  7. 【Alpha】阶段第十次Scrum Meeting
  8. 从零开始学习springmvc(5)——Spring国际化和全局异常处理
  9. 给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(逐句精解)
  10. regexp_replace