有时我通过指向在特定模块上运行 unittest make PYTHON_TEST=path_of_module_to_test test
,如果该模块path_of_module_to_test test
导入了一些其他已更新的 python 模块,则从该模块完成的导入将从更新的 py 源文件或未更新的 pyc 文件中获取,或者将导入导致依赖pyc文件的更新?
问问题
2090 次
1 回答
3
来自PEP 3147:
CPython 将其源代码编译成“字节码”,出于性能原因,每当源文件发生更改时,它都会将此字节码缓存在文件系统上。这使得 Python 模块的加载速度更快,因为可以绕过编译阶段。当您的源文件是 foo.py 时,CPython 将字节码缓存在源文件旁边的 foo.pyc 文件中。
如果您的来源发生变化;CPython 将重新编译并重新缓存字节码。
请注意,以上是针对Python 2.x
. 这一切Python 3.x
在Python 3.2 中发生了变化:PEP 3147: PYC Repository Directories
注意:当我们在这里提到“CPython”时,我们指的是您最有可能从https://www.python.org使用的 Python 的实现,因为这种行为(我相信)是特定于实现的。
于 2015-05-25T05:12:41.357 回答