python .pyc note

提高模块的加载速度

  • Python 并非完全是解释性语言,它也存在编译。先将源码文件 *.py 编译为 *.pyc,然后由 Python 的虚拟机执行。相对于 *.py 文件来说,编译为 *.pyc本质上和 *.py 没有太大区别,只是提高了模块的加载速度,并没有提高代码的执行速度。
  • *.py:源码文件,由 Python 程序解释。
  • *.pyc:源码经编译后生成的二进制字节码(Bytecode)文件。
  • 也就是说,运行速度相差无几,加载速度 *.pyc 稍占优势。当然,除此之外,还有一个很大的优点:隐藏源码!

python .pyc note

demo python 3.8

conda deactivate
conda create -n python38 python=3.8
pip install uncompyle
conda activate python38
tool.py

def user():
    print("tool")

util.py

def puts():
    print("util")

main.py

from util import puts
from tool import user

puts()
user()
s = set()
s.add(1)
s.add(2)
print(s)

python main.py

util
tool
{1, 2}

当前路径生成了pycache 文件夹
tree pycache/

__pycache__
├── tool.cpython-38.pyc
└── util.cpython-38.pyc

反编译(uncompyle6 不支持高版本 python)

uncompyle6 pycache/tool.cpython-38.pyc >/tmp/test.py
cat /tmp/test.py

# uncompyle6 version 3.9.0
# Python bytecode version base 3.8.0 (3413)

def user():
print( tool )

okay decompiling pycache/tool.cpython-38.pyc

ref

  • https://blog.csdn.net/lixinkuan328/article/details/103358409
  • pyc
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
图排家画的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容