根据我的理解,缓存是类似文件的加密文件。

我们对__pycache__文件夹做什么?它是我们提供给人们的而不是我们的源代码吗?仅仅是我的输入数据吗?这个文件夹一直在创建,它是干什么用的?


当前回答

__pycache__中的字节码会在下次应用程序启动时被自动调用吗?例如:如果我们第一次运行一些应用程序main.py,并且所有必要的模块都被编译并存储在pycache中,那么下一次即使我调用python main.py,它们也会自动使用吗?或者我们将不得不调用python _pycache_/main.pyc?

其他回答

__pycache__中的字节码会在下次应用程序启动时被自动调用吗?例如:如果我们第一次运行一些应用程序main.py,并且所有必要的模块都被编译并存储在pycache中,那么下一次即使我调用python main.py,它们也会自动使用吗?或者我们将不得不调用python _pycache_/main.pyc?

从官方的python教程模块

为了加速加载模块,Python将每个模块的编译版本缓存在__pycache__目录下的module.version。Pyc,其中版本对编译文件的格式进行编码;它通常包含Python版本号。例如,在CPython发行版3.6中,spam.py的编译版本将被缓存为__pycache__/spam.cpython-36.pyc。

来自Python文档编程faq

当一个模块第一次被导入时(或者在当前编译文件创建后源文件发生了更改),应该在包含.py文件的目录的__pycache__子目录中创建一个包含编译代码的.pyc文件。.pyc文件的文件名将与.py文件同名,以.pyc结尾,中间有一个组件,该组件取决于创建它的特定python二进制文件。

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

作为程序员,你可以忽略它……它所做的只是使您的程序启动得更快一点。当您的脚本更改时,它们将被重新编译,如果您删除文件或整个文件夹并再次运行您的程序,它们将重新出现(除非您特别禁止这种行为)。

当您将代码发送给其他人时,通常的做法是删除该文件夹,但是否这样做并不重要。当您使用版本控制(git)时,这个文件夹通常列在忽略文件(.gitignore)中,因此不包括在内。

如果你正在使用CPython(这是最常见的,因为它是参考实现),并且你不想要这个文件夹,那么你可以通过使用-B标志启动解释器来抑制它

python -B foo.py

另一个选项,正如tcaswell所指出的,是将环境变量PYTHONDONTWRITEBYTECODE设置为任何值(根据Python的手册页,任何“非空字符串”)。

执行python脚本会在内存中生成字节码,并一直保存到程序关闭为止。 在导入模块的情况下,为了更快的可重用性,Python会创建一个缓存. PYC (PYC是'Python' 'Compiled')文件,其中缓存导入模块的字节码。 想法是通过避免在重新导入python模块时重新编译(编译一次,运行多次策略)来加速加载。

该文件的名称与模块名称相同。初始点之后的部分表示创建缓存的Python实现(可以是CPython),后跟它的版本号。

当你使用下面这行代码时,会创建一个__pycache__文件夹:

import file_name

或者尝试从您创建的另一个文件中获取信息。这使得在第二次运行程序打开另一个文件时速度略快。