Python 什么是pycache?
据我所知,缓存是类似文件的加密文件Python 什么是pycache?,python,python-3.x,caching,Python,Python 3.x,Caching,据我所知,缓存是类似文件的加密文件 我们如何处理\uuuu pycache\uuuu文件夹?这是我们给人们的东西而不是我们的源代码吗?这只是我的输入数据吗?不断创建此文件夹,它的用途是什么 在python中运行程序时,解释器首先将其编译为字节码(这是一种过于简化的做法),并将其存储在\uuuuuupycache\uuuuuu文件夹中。如果您查看那里,您会发现在项目文件夹中有一堆文件共享.py文件的名称,只有它们的扩展名是.pyc或.pyo。它们分别是程序文件的字节码编译版本和优化字节码编译版本
我们如何处理
\uuuu pycache\uuuu
文件夹?这是我们给人们的东西而不是我们的源代码吗?这只是我的输入数据吗?不断创建此文件夹,它的用途是什么 在python中运行程序时,解释器首先将其编译为字节码(这是一种过于简化的做法),并将其存储在\uuuuuupycache\uuuuuu
文件夹中。如果您查看那里,您会发现在项目文件夹中有一堆文件共享.py文件的名称,只有它们的扩展名是.pyc或.pyo。它们分别是程序文件的字节码编译版本和优化字节码编译版本
作为一个程序员,你基本上可以忽略它。。。它所做的只是让你的程序启动得更快一点。当脚本更改时,它们将重新编译,如果删除文件或整个文件夹并再次运行程序,它们将重新出现(除非您特别禁止该行为)
当您将代码发送给其他人时,通常的做法是删除该文件夹,但您是否这样做并不重要。使用版本控制(git
)时,此文件夹通常列在忽略文件(.gitignore
)中,因此不包括在内
如果您使用的是cpython(这是最常见的,因为它是参考实现),并且您不需要该文件夹,那么您可以通过使用-B标志启动解释器来抑制它,例如
python -B foo.py
正如tcaswell所指出的,另一个选项是将环境变量
pythontwritebytecode
设置为任何值(根据python的手册页,任何“非空字符串”)。\uuu pycache\uuu
是一个文件夹,其中包含编译并准备执行的python 3字节码
我不建议在开发过程中经常费力地删除这些文件或抑制创建,因为这会浪费您的时间。只要准备一个递归命令(见下文)在需要时进行清理,因为字节码在边缘情况下可能会过时(见注释)
Python程序员通常忽略字节码。实际上,在.gitignore
文件中可以看到\uuuuupycache\uuuuu
和*.pyc
这两行代码。字节码不用于分发,可以使用进行反汇编
如果您使用的是OSX,则可以通过从项目的根文件夹运行以下命令,轻松隐藏项目中的所有这些文件夹
find . -name '__pycache__' -exec chflags hidden {} \;
用Python 2的*.pyc
替换\uuuu pycache\uuuu
这会在所有这些目录(.pyc文件)上设置一个标志,告诉Finder/Textmate 2将它们从列表中排除。重要的是字节码在那里,它只是隐藏的
如果创建新模块并希望隐藏新字节码或删除隐藏的字节码文件,请重新运行该命令
在Windows上,等效命令可能是(未测试,欢迎使用批处理脚本): 这与使用右键单击>隐藏查看项目隐藏文件夹相同
运行单元测试是一种场景(更多注释),其中删除
*.pyc
文件和\uuuupycache\uuuuu
文件夹确实很有用。我在我的~/.bash_配置文件中使用以下行
,并在需要时运行cl
进行清理
alias cpy='find . -name "__pycache__" -delete'
alias cpc='find . -name "*.pyc" -delete'
...
alias cl='cpy && cpc && ...'
最近
# pip install pyclean
pyclean .
在3.2及更高版本中,Python将.pyc编译的字节码文件保存在名为
\uuuuu pycache\uuuu
的子目录中,该子目录位于源文件所在的目录中,文件名标识创建它们的Python版本(例如script.cpython-33.pyc)更新了3.7+文档中的答案:
为了加速加载模块,Python缓存编译后的
名称下的\uuuu pycache\uuuu
目录中的每个模块
module.version.pyc
,其中版本对
编译文件;它通常包含Python版本号。对于
例如,在CPython 3.3版中,spam.py的编译版本
被缓存为\uuuu pycache\uuuu/spam.cpython-33.pyc
。这个命名约定
允许从不同版本和不同版本编译模块
让Python共存
资料来源:
也就是说,这个目录是由Python生成的,它的存在是为了让程序运行得更快。它不应该致力于源代码控制,应该与本地源代码和平共处
\uuuu pycache\uuuu
是一个目录,其中包含由python自动生成的字节码缓存文件,即编译的python或.pyc
文件。您可能想知道为什么Python,一种“解释”语言,有任何编译文件。解决了这个问题(这绝对值得一读)
python文档更深入地介绍了它是如何工作的以及它存在的原因:
- 因为在同一目录中维护
文件的现有系统会导致各种问题,例如,当程序使用不同版本的Python解释器运行时。有关完整的功能规范,请参见.pyc
\uuuuuuuuuuuuuuuupycache\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
import file_name
或者尝试从您创建的另一个文件中获取信息。这使得在第二次运行程序以打开另一个文件时速度更快。python解释器编译*.py脚本文件,并将编译结果保存到\uuuupycache\uucode>目录
再次执行项目时,如果解释器确定*.py脚本未被修改,它将跳过编译步骤,并运行先前生成的*.pyc文件,该文件存储在\uuuuuuuupycache\uuuu
文件夹中
当项目复杂时,可以缩短项目运行前的准备时间。如果程序太小,您可以使用python-abc.py
和B
opti忽略它
import file_name
alok@alok:~$ ls
module.py module.pyc __pycache__ test.py
alok@alok:~$
import file_name