Python中Pyc文件的作用

来源:互联网 发布:关键词布局优化 编辑:程序博客网 时间:2024/06/07 23:20

今天在学习Python的seaborn第三方库,目的是想要画出一些漂亮的数据图。

然后写了一个简单的seaborn.py后一直报错如下:AttributeError: module 'seaborn' has no attribute 'set'


经过一番stackoverflow 和 百度之后,发现是我的.py文件命名错误,我写的seaborn.py和第三方库seaborn命名冲突,造成了这个AttibuteError。

解决办法如下,将seaborn.py 替换成不含Python关键字的文件,并且删除.pyc文件:



下面介绍下什么是pyc文件:

pyc文件,是python编译后的字节码(bytecode)文件。只要你运行了py文件,python编译器就会自动生成一个对应的pyc字节码文件。这个pyc字节码文件,经过python解释器,会生成机器码运行(这也是为什么pyc文件可以跨平台部署,类似于java的跨平台,java中JVM运行的字节码文件)。下次调用直接调用pyc,而不调用py文件。直到你这个py文件有改变。python解释器会检查pyc文件中的生成时间,对比py文件的修改时间,如果py更新,那么就生成新的pyc。

下面介绍下什么时候会生成.pyc文件:

在你 import 别的 py 文件时,那个 py 文件会被存一份 pyc 加速下次装载。而主文件因为只需要装载一次就没有存 pyc,你可以写两个 a.py 和 b.py,一个 import 另一个试试看。在你 import 别的 py 文件时,那个 py 文件会被存一份 pyc 加速下次装载。而主文件因为只需要装载一次就没有存 pyc,你可以写两个 a.py 和 b.py,一个 import 另一个试试看。

示例如下图:

a.py


b.py


运行结果:


从下图我们可以看到a.py 是被引用的文件,所以它会在__pycache__下生成a.py对应的pyc文件,若下次执行脚本时,若解释器发现你的 *.py 脚本没有变更,便会跳过编译一步,直接运行保存在 __pycache__ 目录下的 *.pyc 文件


原创粉丝点击