运行Python脚本时生成的__pycache__文件夹

原创 2017年06月20日 16:55:37

· 前言

python编写好一个工程,在第一次运行后,总会发现工程根目录下生成了一个__pycache__文件夹,里面是和py文件同名的各种 *.pyc 或者 *.pyo 文件。


先大概了解一下python基本运行机制。Python程序运行时不需要编译成二进制代码,而直接从源码运行程序,简单来说是,Python解释器源码转换为字节码,然后再由解释器来执行这些字节码。

解释器的具体工作:

1 完成模块的加载和链接;

2 将源代码编译为PyCodeObject对象(即字节码),写入内存中,供CPU读取;

3 从内存中读取并执行,结束后将PyCodeObject写回硬盘当中,也就是复制到.pyc或.pyo文件中,以保存当前目录下所有脚本的字节码文件;

* 之后若再次执行该脚本,它先检查【本地是否有上述字节码文件】和【该字节码文件的修改时间是否与其脚本一致】。是就直接执行,否则重复上述步骤。


以下参考自stackoverflow上的一个回答。


· 为什么会出现__pycache__文件夹?

python解释器 *.py 脚本文件进行编译,并将编译结果保存到__pycache__目录中。

下次再执行工程时,若解释器发现这个 *.py 脚本没有修改过,就会跳过编译这一步,直接运行以前生成的保存在 __pycache__文件夹里的 *.pyc 文件。

这样工程较大时就可以大大缩短项目运行前的准备时间;如果你只需执行一个小工程,没关系 忽略这个文件夹就行。


· 什么时候会出现__pycache__文件夹?

工程目录下有__main__.py文件,和其他将要调用的模块时。如果只有当前运行的脚本 "__main__",则不会生成 __pycache__ 的文件。


· 如何使__pycache__文件夹不出现?

单次: 运行脚本时添加 -B 参数

python -B foo.py

永久: 设置环境变量 PYTHONDONTWRITEBYTECODE=1


   附:该文件夹出现在Python3.2及其后的版本中,Python2下的编译文件和源文件放同目录。




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/index20001/article/details/73501375

pyhton中__pycache__文件夹的产生与作用

源起 今天和一新来的同事沟通,说他用python编写了一个工程,但在第一次运行后,发现工程根目录下生成了一个__pycache__文件夹,里面是和py文件同名的各种以 .cpython-35.pyc...
  • yitiaodashu
  • yitiaodashu
  • 2018-01-10 15:05:22
  • 688

Python 运行时为啥会产生一个叫__pycache__的文件夹

· 前言 转载 来自 http://blog.csdn.net/index20001/article/details/73501375 用python编写好一个工程,在第一次运行后,总会发现工程根目...
  • qq_21033779
  • qq_21033779
  • 2017-10-19 13:39:08
  • 626

Python学习笔记之七——模块

Python 中的模块
  • Jeff_Liu_Sky
  • Jeff_Liu_Sky
  • 2016-08-30 21:48:32
  • 1747

.gitignore文件的使用说明

在windows下做项目开发时候,边开发边编译调试,会产生很多文件,像.vs,Debug等文件,但是当你将代码交给git管理的时候,这个文件是不需要上传git的,如果上传的话,由于文件夹下的子文件相对...
  • Grand910616
  • Grand910616
  • 2017-01-03 12:12:31
  • 1361

python 去掉 pyc

python 去掉 .pyc在开发的机器上(Ubuntu),python自动生成的pyc文件太影响心情,把下面的语句添加到/etc/profile中:# do not produce .pyc exp...
  • cheungmine
  • cheungmine
  • 2015-09-06 11:33:20
  • 3183

Python编译目录下的所有文件通过这个命令,可以将指定目录下的所有py文件编译成pyc,包括子目 Python编译目录下的所有

Python编译目录下的所有文件通过这个命令,可以将指定目录下的所有py文件编译成pyc,包括子目 Python编译目录下的所有:   通过这个命令,可以将指定目录下的所有py文件编译成...
  • THMAIL
  • THMAIL
  • 2017-07-06 08:23:23
  • 593

python下编译py成pyc和pyo

其实很简单, 用 python -m py_compile file.py python -m py_compile /root/src/{file1,file2}.py 编译成pyc文件...
  • lyj1101066558
  • lyj1101066558
  • 2016-05-23 10:23:43
  • 6586

Python学习笔记(17)-windows和linux下的路径与文件

一,简介Python的目录操作与文件读写设计的非常简洁明了,合乎情理,所以直接用两个例子来演示即可。二,目录操作#目录操作示例#导入目录模块 import os#获取并输出当前目录 dir=os.ge...
  • woshisangsang
  • woshisangsang
  • 2017-06-26 14:41:56
  • 1376

详解python linecache模块读取文件的方法

本节主要内容: python linecache模块读取文件 在python中,有个好用的模块linecache,该模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读...
  • my2010Sam
  • my2010Sam
  • 2014-07-21 18:32:22
  • 19505

Python学习笔记之三——如何运行Python程序

如何运行Python程序
  • Jeff_Liu_Sky
  • Jeff_Liu_Sky
  • 2016-08-04 13:14:15
  • 51249
收藏助手
不良信息举报
您举报文章:运行Python脚本时生成的__pycache__文件夹
举报原因:
原因补充:

(最多只允许输入30个字)