当没有匹配的.pyc文件时,Python如何运行模块代码?

时间:2012-05-28 13:00:24

标签: python bytecode

如果从Windows 7中的python命令行导入module1.py,我会在Python32 / pycache /文件夹中看到相应的module1.pyc文件。我的理解是这个字节码是由Python解释器执行的,但是我可以删除module1.pyc文件,我的模块函数(module1.func1()等...)仍然可以从命令行调用。调用函数时运行的是什么,但.pyc文件不在那里?编译字节码时是否也将其复制到Python shell的运行时内存中?

2 个答案:

答案 0 :(得分:5)

运行解释器时,字节码在内存中。 .pyc文件是下一次导入代码的缓存,因此如果代码没有更改,python就不必解析代码。

答案 1 :(得分:3)

TL; DR

Python总是运行编译的字节码,在运行时编译或从磁盘上的.pyc文件读取。

稍长答案

Python需要字节码编译时调用py_compilecompileall。如果在.pyc文件中找到有效的预编译字节代码,Python就会使用它。即使没有原始源文件,它也可以执行此操作。

如果没有.pyc文件,或者源文件比预编译的字节代码更新,则Python使用源文件并重新编译。这就是你正在观察的行为。

官方答复

有关规范的答案,请参阅PEP 3147: PYC Repository Directories