根据我的理解,缓存是类似文件的加密文件。
我们对__pycache__文件夹做什么?它是我们提供给人们的而不是我们的源代码吗?仅仅是我的输入数据吗?这个文件夹一直在创建,它是干什么用的?
根据我的理解,缓存是类似文件的加密文件。
我们对__pycache__文件夹做什么?它是我们提供给人们的而不是我们的源代码吗?仅仅是我的输入数据吗?这个文件夹一直在创建,它是干什么用的?
当前回答
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。
其他回答
当你在Python中运行一个程序时,解释器首先将它编译为字节码(这是一种过度简化),并将其存储在__pycache__文件夹中。如果你在那里查看,你会发现一堆文件共享项目文件夹中的。py文件的名称,只有它们的扩展名是。pyc或。pyo。它们分别是程序文件的字节码编译版本和优化字节码编译版本。
作为程序员,你可以忽略它……它所做的只是使您的程序启动得更快一点。当您的脚本更改时,它们将被重新编译,如果您删除文件或整个文件夹并再次运行您的程序,它们将重新出现(除非您特别禁止这种行为)。
当您将代码发送给其他人时,通常的做法是删除该文件夹,但是否这样做并不重要。当您使用版本控制(git)时,这个文件夹通常列在忽略文件(.gitignore)中,因此不包括在内。
如果你正在使用CPython(这是最常见的,因为它是参考实现),并且你不想要这个文件夹,那么你可以通过使用-B标志启动解释器来抑制它
python -B foo.py
另一个选项,正如tcaswell所指出的,是将环境变量PYTHONDONTWRITEBYTECODE设置为任何值(根据Python的手册页,任何“非空字符串”)。
Python版本2。当解释器编译代码时,X将具有.pyc。
Python版本3。解释器编译代码时,X将具有__pycache__。
alok@alok:~$ ls
module.py module.pyc __pycache__ test.py
alok@alok:~$
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。
python解释器编译*.py脚本文件,并将编译结果保存到__pycache__目录。
当再次执行项目时,如果解释器识别出*.py脚本没有被修改,它将跳过编译步骤并运行先前生成的*.py脚本。Pyc文件存储在__pycache__文件夹中。
当项目比较复杂时,可以使项目运行前的准备时间变短。如果程序太小,可以使用带有B选项的python -B abc.py来忽略这一点。
__pycache__是一个包含已编译并准备执行的Python 3字节码的文件夹。
我不建议在开发过程中经常费力地删除这些文件或抑制创建,因为这会浪费你的时间。只需准备一个递归命令(见下文),以便在需要时进行清理,因为字节码在边缘情况下可能会过时(见注释)。
Python程序员通常忽略字节码。确实__pycache__和*。Pyc是.gitignore文件中常见的行。字节码不是用于分发的,可以使用dis模块进行分解。
如果你使用的是OS X,你可以在项目的根文件夹中运行以下命令,轻松地将所有这些文件夹隐藏在项目中。
find . -name '__pycache__' -exec chflags hidden {} \;
将__pycache__替换为*。pyc for Python 2。
这将在所有这些目录上设置一个标志(。pyc文件)告诉Finder/Textmate 2从列表中排除它们。重要的是,字节码就在那里,只是隐藏起来了。
如果创建新模块并希望隐藏新的字节码,或者删除隐藏的字节码文件,则重新运行该命令。
在Windows上,等价的命令可能是(未测试,欢迎批处理脚本):
dir * /s/b | findstr __pycache__ | attrib +h +s +r
这与通过项目隐藏文件夹使用右击> hide…
运行单元测试是删除*. .Pyc文件和__pycache__文件夹确实很有用。我在~/中使用以下行。Bash_profile,并在需要时运行cl来清理。
alias cpy='find . -name "__pycache__" -delete'
alias cpc='find . -name "*.pyc" -delete'
...
alias cl='cpy && cpc && ...'
最近
# pip install pyclean
pyclean .