zoukankan      html  css  js  c++  java
  • python如何不生成pyc文件(三种方式)

    · 前言

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

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

    解释器的具体工作:

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

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

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

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

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

    pyc文件的生成是什么情况下生成呢:

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

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

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

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

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


    当 import导入另一个模块的时候会生成
    python3会生成 __pycache__
    如何不生成编译文件呢:
    1.执行的时候 使用 -B参数 即

    python3 -B test.py

    里面的包含的就不会生成pyc了

    2.设置环境变量

    export PYTHONDONTWRITEBYTECODE=1

    还有一种更方便的
    3. 在引入的地方写

    import sys
    sys.dont_write_bytecode = True

    以上三种方式都可以实现不生成pyc文件。

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

    参考:https://blog.csdn.net/qq_28295425/article/details/82966343

  • 相关阅读:
    SCI写作经典替换词,瞬间高大上!(转)
    最佳化常用测试函数 Optimization Test functions
    算法复杂度速查表
    VS 代码行统计
    CPLEX IDE 菜单栏语言设置( 中文 英文 韩文 等多国语言 设置)
    如何从PDF文件中提取矢量图
    Matlab无法打开M文件的错误( Undefined function or method 'uiopen' for input arguments of type 'char)
    visual studio 资源视图 空白 解决方案
    MFC DialogBar 按钮灰色不响应
    嗨翻C语言笔记(二)
  • 原文地址:https://www.cnblogs.com/T8888/p/13927083.html
Copyright © 2011-2022 走看看