• Python3.6 import源文件与编译文件的关系


    小结:

        在Python3.6中

    • 源文件存在时,import会比较源文件与__pycache__里相应文件的时间戳,来决定是否重新生成缓存编译文件
    • 源文件不存在时,import会导入相应的.pyc文件

    以下以一个小实验进行比较:

    1. 创建 main.py

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    '''import测试
    
    结论:
        在有源文件的条件下,import总是会根据源文件在__pycache__目录下生成最新pyc文件
        在没有源文件的情况下,import 才会导入相应目录下的.pyc(python编译文件)
    
    '''
    import amodule

    2. 创建 amodule.py

    print(2)
    print(__file__)

    3. 创建 build.py

    # -*- coding: utf-8 -*-
    import compileall
    import os
    
    compileall.compile_dir(os.path.abspath(os.path.dirname(__file__)),legacy=True,force=True)

    4. 用build.py编译文件

    5. 执行main.py

      运行main.py后,会发现当前目录下创建了__pycache__目录,该目录下生成了amodule.cpython-36.pyc

    6. 修改 amodule.py

    print(3)
    print(__file__)

    7. 再用build.py编译文件

    8. 再执行main.py

      运行main.py后,会发现更新了 当前目录\__pycache__amodule.cpython-36.pyc 文件

    10. 删除 amodule.py 文件及 __pycache__ 目录

    11. 再执行main.py

      此时导入的是amodule.pyc文件

  • 相关阅读:
    url路由配置及渲染方式
    django类视图介绍与类视图装饰器
    什么是数据类型
    python代码的编写和运行
    python环境搭建
    python教程(目录)
    编程语言概念
    面向对象入门
    编程语言
    Tornado框架实现图形验证码功能
  • 原文地址:https://www.cnblogs.com/yaoyu126/p/6472669.html
Copyright © 2020-2023  润新知