什么是__pycache__?

据我所知,caching是类似文件的encryption文件。

作为程序员,我们用文件夹__pycache__做什么? 这是我们给人而不是我们的源代码? 这只是我input的数据吗? 这个文件夹不断创build,我想知道它是什么…

当你用python运行一个程序时,解释器首先将它编译成字节码(这是过于简化),并将其存储在__pycache__文件夹中。 如果你看看那里你会发现一堆文件共享项目文件夹中的.py文件的名称,只有他们的扩展名是.pyc或.pyo。 这些分别是字节码编译和优化字节码编译版本的程序文件。

作为一名程序员,你可以大致忽略它…它所做的只是让你的程序开始更快一点。 当你的脚本改变时,它们将被重新编译,如果你删除了文件或者整个文件夹并且再次运行你的程序,它们将会重新出现(除非你明确地禁止了这个行为)

如果你使用的是cpython(这是最常见的,因为它是参考实现),你不想要那个文件夹,那么你可以通过启动带有-B标志的解释器来禁止它

 python -B foo.py 

tcaswell指出的另一个select是将环境variablesPYTHONDONTWRITEBYTECODE设置为任何值(根据python的手册页,任何“非空string”)。

__pycache__是一个包含Python 3字节码的文件夹,已编译并准备好执行

不要打扰删除这些文件或压制创build。 这是毫无意义的,实际上会伤害到性能。

Python程序员通常会忽略字节码。 事实上__pycache__*.pyc是在.gitignore文件中看到的常用行。 字节码不是用于分发,可以使用dis模块进行反汇编。


如果您使用的是OS X,则可以通过从项目的根文件夹运行以下命令轻松地隐藏项目中的所有这些文件夹。

 find . -name '__pycache__' -exec chflags hidden {} \; 

replace__pycache__与Python *.pyc 2的*.pyc

这会在所有这些目录(.pyc文件)上设置一个标志,告诉Finder / Textmate 2将它们从列表中排除。

如果您创build新模块并希望隐藏新的字节码或删除隐藏的字节码文件,请重新运行该命令。


在Windows上,等效命令可能是(未经testing,欢迎批处理脚本):

 dir * /s/b | findstr __pycache__ | attrib +h +s +r 

这与通过项目隐藏文件夹使用右键单击>隐藏…相同

在3.2及更高版本中,Python将.pyc字节代码文件保存在位于源文件所在目录的名为pycache的子目录中,以及名称标识创build它们的Python版本的文件中(例如script.cpython-33.pyc )