如果从Windows 7中的python命令行导入module1.py,我会在Python32 / pycache /文件夹中看到相应的module1.pyc文件。我的理解是这个字节码是由Python解释器执行的,但是我可以删除module1.pyc文件,我的模块函数(module1.func1()等...)仍然可以从命令行调用。调用函数时运行的是什么,但.pyc文件不在那里?编译字节码时是否也将其复制到Python shell的运行时内存中?
答案 0 :(得分:5)
运行解释器时,字节码在内存中。 .pyc文件是下一次导入代码的缓存,因此如果代码没有更改,python就不必解析代码。
答案 1 :(得分:3)
Python总是运行编译的字节码,在运行时编译或从磁盘上的.pyc文件读取。
Python需要字节码编译时调用py_compile或compileall。如果在.pyc文件中找到有效的预编译字节代码,Python就会使用它。即使没有原始源文件,它也可以执行此操作。
如果没有.pyc文件,或者源文件比预编译的字节代码更新,则Python使用源文件并重新编译。这就是你正在观察的行为。
有关规范的答案,请参阅PEP 3147: PYC Repository Directories 。