5

有时我通过指向在特定模块上运行 unittest make PYTHON_TEST=path_of_module_to_test test,如果该模块path_of_module_to_test test导入了一些其他已更新的 python 模块,则从该模块完成的导入将从更新的 py 源文件或未更新的 pyc 文件中获取,或者将导入导致依赖pyc文件的更新?

4

1 回答 1

3

来自PEP 3147

CPython 将其源代码编译成“字节码”,出于性能原因,每当源文件发生更改时,它都会将此字节码缓存在文件系统上。这使得 Python 模块的加载速度更快,因为可以绕过编译阶段。当您的源文件是 foo.py 时,CPython 将字节码缓存在源文件旁边的 foo.pyc 文件中。

如果您的来源发生变化;CPython 将重新编译并重新缓存字节码。

请注意,以上是针对Python 2.x. 这一切Python 3.xPython 3.2 中发生了变化:PEP 3147: PYC Repository Directories

注意:当我们在这里提到“CPython”时,我们指的是您最有可能从https://www.python.org使用的 Python 的实现,因为这种行为(我相信)是特定于实现的。

于 2015-05-25T05:12:41.357 回答