根据我的理解,缓存是类似文件的加密文件。
我们对__pycache__文件夹做什么?它是我们提供给人们的而不是我们的源代码吗?仅仅是我的输入数据吗?这个文件夹一直在创建,它是干什么用的?
根据我的理解,缓存是类似文件的加密文件。
我们对__pycache__文件夹做什么?它是我们提供给人们的而不是我们的源代码吗?仅仅是我的输入数据吗?这个文件夹一直在创建,它是干什么用的?
当前回答
__pycache__中的字节码会在下次应用程序启动时被自动调用吗?例如:如果我们第一次运行一些应用程序main.py,并且所有必要的模块都被编译并存储在pycache中,那么下一次即使我调用python main.py,它们也会自动使用吗?或者我们将不得不调用python _pycache_/main.pyc?
其他回答
当你使用下面这行代码时,会创建一个__pycache__文件夹:
import file_name
或者尝试从您创建的另一个文件中获取信息。这使得在第二次运行程序打开另一个文件时速度略快。
执行python脚本会在内存中生成字节码,并一直保存到程序关闭为止。 在导入模块的情况下,为了更快的可重用性,Python会创建一个缓存. PYC (PYC是'Python' 'Compiled')文件,其中缓存导入模块的字节码。 想法是通过避免在重新导入python模块时重新编译(编译一次,运行多次策略)来加速加载。
该文件的名称与模块名称相同。初始点之后的部分表示创建缓存的Python实现(可以是CPython),后跟它的版本号。
当你导入一个模块时,
import file_name
Python将编译后的字节码存储在__pycache__目录中,以便将来的导入可以直接使用它,而不必再次解析和编译源代码。
它不会仅仅运行一个脚本,只有在导入文件时才会这样做。
(以前的版本用于将缓存的字节码存储为.pyc文件,与.py文件放在同一个目录中,但从Python 3开始,它们被移动到子目录中以使内容更整洁。)
如果设置为非空字符串,Python将不会尝试在导入源模块时写入.pyc文件。这相当于指定-B选项。
3.7+文档的更新答案:
To speed up loading modules, Python caches the compiled version of each module in the __pycache__ directory under the name module.version.pyc, where the version encodes the format of the compiled file; it generally contains the Python version number. For example, in CPython release 3.3 the compiled version of spam.py would be cached as __pycache__/spam.cpython-33.pyc. This naming convention allows compiled modules from different releases and different versions of Python to coexist.
来源:https://docs.python.org/3/tutorial/modules.html compiled-python-files
也就是说,这个目录是由Python生成的,它的存在是为了让你的程序运行得更快。它不应该致力于源代码控制,而应该与本地源代码和平共存。
__pycache__是一个目录,其中包含由python自动生成的字节码缓存文件,即编译过的python或.pyc文件。你可能想知道为什么Python这种“解释型”语言会有编译文件。这个SO问题解决了这个问题(这个答案绝对值得一读)。
python文档更深入地介绍了它是如何工作的以及它存在的原因:
它是在python 3.2中添加的,因为在同一目录中维护.pyc文件的现有系统会导致各种问题,例如当一个程序使用不同版本的python解释器运行时。有关完整的特性规范,请参阅PEP 3174。
__pycache__中的字节码会在下次应用程序启动时被自动调用吗?例如:如果我们第一次运行一些应用程序main.py,并且所有必要的模块都被编译并存储在pycache中,那么下一次即使我调用python main.py,它们也会自动使用吗?或者我们将不得不调用python _pycache_/main.pyc?