在我的系统中,我创建了一个由多个文件组成的 Python 应用程序。应用程序的目录结构如下:
application_directory
|- file_a.py
|- file_b.py
|- file_c.py
脚本内部
file_c.py
存在以下导入:
import file_a
from file_b import ClassB
当我通过命令行执行脚本
file_c.py
时:
python3 file_c.py
在文件夹
application_folder
中创建了一个名为 __pycache__
的目录,在其中我找到了两个带有 python 字节码的文件(请参阅 this link 和 this other link 以获取有关 Python 中编译概念的更多信息)和称为:
__pycache__/file_a.cpython-310.pyc
__pycache__/file_b.cpython-310.pyc
为了理解为什么创建这个文件,我进行了很多搜索,并找到了许多关于该主题的链接。最清楚的可能是这个答案,它似乎非常适合理解我的上下文中发生的情况。
答案中有以下句子:
运行脚本不被视为导入,并且不会创建 .pyc。
所以我问:只有导入的模块才会创建带有字节码的文件?为什么导入模块的管理与未导入脚本的管理存在这种差异?
编辑 我发现这个其他答案对于更好地理解CPython的工作原理、字节码的概念和保存到硬盘的文件
.pyc
非常有用。
所有文件在执行之前都会被编译,Python只是不将它们写入文件。在这种情况下,因为它们是导入的,所以模块会被编译然后缓存,以使后续运行更快。