[Python]pyc pyo文件

pyc和pyo是什么

    1.pyc是Python保存字节码,若源码无修改,下次直接加载pyc,跳过把py『编译』成字节码pyc这个步骤,以优化启动速度;
      2.pyo也是字节码,比pyc更小。

什么时候会生成pyc、pyo文件?

import包的时候。

比如当import一个包比如datetime时,就会产生datetime.pyc文件,当下次导入datetime包的时候,Python会对比字节码和源码修改时间,若无修改则直接加载pyc文件,跳过对datetime进行『编译』这个步骤

如何手动生成

  • 生成pyc文件
    python -m py_compile a.py b.py c.py 就会生成a.pyc b.pyc c.pyc

  • 生成pyo文件
    python -O -m py_compile a.py b.py c.py 就会生成a.pyo b.pyo c.pyo

Python 运行机制

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

用途

不让别人看源码

禁止生成pyc文件

import sys
sys.dont_write_bytecode=True

AttributeError: ‘module’ object has no attribute’xxx

  1. 命名py脚本时,不要与python预留字,模块名等相同

  2. 删除该库的.pyc文件(因为py脚本每次运行时均会生成.pyc文件;在已经生成.pyc文件的情况下,若代码不更新,运行时依旧会走pyc,所以要删除.pyc文件),重新运行代码;或者找一个可以运行代码的环境,拷贝替换当前机器的.pyc文件即可

posted @ 2017-03-14 11:24  cn_wk  阅读(85)  评论(0)    收藏  举报