• pyc文件


    1. python解释器执行流程

    # 总流程
    源代码——编译》字节码(pyc文件)——解释》机器码
    
    1.先进行编译,将源代码的编译结果(字节码)放在内存中的PyCodeObject对象中
    2.解释器将字节码转化成机器码
    3.程序执行结束,解释器则将内存中PyCodeObject写回到pyc文件中
    4.再次执行该程序时,查看pyc文件,如果pyc字节码文件存在,且源代码文件与字节码文件最后修改时间一致,直接转化为机器码
    5.源代码变化,则从第一步开始,没有变化则从第二步开始,按此循环
    

    2.生成pyc文件场景

    1. 为什么要生成pyc
    从刚才的执行流程中,pyc文件的存在可以省略编译的过程,提升执行效率
    
    2.重用性比较多的,python解释器将import进来的模块,默认产生pyc,这些模块复用性更强
    
    3. 实例
    # 文件one.py
    [root@localhost test]# cat one.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import datetime
    def get_now_time():
        print(datetime.datetime.now())
        return "当前时间:%s" % (datetime.datetime.now())
    
    # 文件two.py,two.py文件中使用one.py中的函数,通过import导入
    [root@localhost test]# cat two.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from one import get_now_time
    
    if __name__ == '__main__':
        res = get_now_time()
        print("获取结果--%s" % res)
    
    # 执行two.py 文件
    [root@localhost test]# ls
    one.py  two.py
    [root@localhost test]# python3 two.py 
    2019-03-16 18:08:38.119045
    获取结果--当前时间:2019-03-16 18:08:38.119163
    # 产生了pyc文件
    [root@localhost test]# ls -a
    .  ..  one.py  __pycache__  two.py
    [root@localhost test]# cd __pycache__/
    [root@localhost __pycache__]# ls
    one.cpython-37.pyc
    
    

    3.手动生成pyc文件

    1. python -m
    
    2. py_compile
    # 被编译的目标文件
    [root@localhost test]# cat three.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    print("@@@@@@@@@@@@")
    
    # create_pyc.py
    [root@localhost test]# cat create_pyc.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import py_compile
    res=py_compile.compile("/qqc_ceshi/test/three.py")
    print(res,"$$$$$$$$$$")
    
    [root@localhost test]# python3 create_pyc.py 
    /qqc_ceshi/test/__pycache__/three.cpython-37.pyc $$$$$$$$$$
    [root@localhost __pycache__]# ls -a
    .  ..  one.cpython-37.pyc  three.cpython-37.pyc
    
    # 执行pyc文件
    [root@localhost __pycache__]# python3 three.cpython-37.pyc 
    @@@@@@@@@@@@
    
    
    3. import py_compileall
    
  • 相关阅读:
    修改linux的ssh默认端口号22的方法
    centos6 配置静态IP
    homebrew 无法安装提示不能在根目录下使用
    MySQL Replication 详解MySQL数据库设置主从同步的方法
    两台Mysql数据库数据同步实现
    MySql主从同步和延迟同步
    c#委托和事件
    C# Out和Ref区别
    MVC与三层架构
    经典数据库题
  • 原文地址:https://www.cnblogs.com/quqinchao/p/bian_liang.html
Copyright © 2020-2023  润新知