带有字节码的文件真的只是为导入的模块创建的吗?

问题描述 投票:0回答:1

在我的系统中,我创建了一个由多个文件组成的 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 linkthis other link 以获取有关 Python 中编译概念的更多信息)和称为:

__pycache__/file_a.cpython-310.pyc
__pycache__/file_b.cpython-310.pyc

为了理解为什么创建这个文件,我进行了很多搜索,并找到了许多关于该主题的链接。最清楚的可能是这个答案,它似乎非常适合理解我的上下文中发生的情况。

答案中有以下句子:

运行脚本不被视为导入,并且不会创建 .pyc。

所以我问:只有导入的模块才会创建带有字节码的文件?为什么导入模块的管理与未导入脚本的管理存在这种差异?


编辑 我发现这个其他答案对于更好地理解CPython的工作原理、字节码的概念和保存到硬盘的文件

.pyc
非常有用。

python module bytecode cpython
1个回答
1
投票

所有文件在执行之前都会被编译,Python只是不将它们写入文件。在这种情况下,因为它们是导入的,所以模块会被编译然后缓存,以使后续运行更快。

© www.soinside.com 2019 - 2024. All rights reserved.