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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM