小结:

    在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文件

 

相关文章:

  • 2022-12-23
  • 2021-07-15
  • 2021-10-11
  • 2021-12-09
  • 2022-01-06
  • 2022-12-23
  • 2022-12-23
  • 2021-08-12
猜你喜欢
  • 2021-07-12
  • 2021-09-07
  • 2022-12-23
  • 2021-04-02
  • 2021-12-31
  • 2021-08-06
相关资源
相似解决方案