根据我的理解,缓存是类似文件的加密文件。
我们对__pycache__文件夹做什么?它是我们提供给人们的而不是我们的源代码吗?仅仅是我的输入数据吗?这个文件夹一直在创建,它是干什么用的?
根据我的理解,缓存是类似文件的加密文件。
我们对__pycache__文件夹做什么?它是我们提供给人们的而不是我们的源代码吗?仅仅是我的输入数据吗?这个文件夹一直在创建,它是干什么用的?
当前回答
当你导入一个模块时,
import file_name
Python将编译后的字节码存储在__pycache__目录中,以便将来的导入可以直接使用它,而不必再次解析和编译源代码。
它不会仅仅运行一个脚本,只有在导入文件时才会这样做。
(以前的版本用于将缓存的字节码存储为.pyc文件,与.py文件放在同一个目录中,但从Python 3开始,它们被移动到子目录中以使内容更整洁。)
如果设置为非空字符串,Python将不会尝试在导入源模块时写入.pyc文件。这相当于指定-B选项。
其他回答
在3.2及以后版本中,Python将.pyc编译的字节代码文件保存在名为__pycache__的子目录中,该子目录位于源文件所在的目录中,其文件名标识创建它们的Python版本(例如script.cpython-33.pyc)。
Python版本2。当解释器编译代码时,X将具有.pyc。
Python版本3。解释器编译代码时,X将具有__pycache__。
alok@alok:~$ ls
module.py module.pyc __pycache__ test.py
alok@alok:~$
__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 .
执行python脚本会在内存中生成字节码,并一直保存到程序关闭为止。 在导入模块的情况下,为了更快的可重用性,Python会创建一个缓存. PYC (PYC是'Python' 'Compiled')文件,其中缓存导入模块的字节码。 想法是通过避免在重新导入python模块时重新编译(编译一次,运行多次策略)来加速加载。
该文件的名称与模块名称相同。初始点之后的部分表示创建缓存的Python实现(可以是CPython),后跟它的版本号。
从官方的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二进制文件。