如何编译Python文件?

2023-10-28

一、编译Python文件

为了提高加载模块的速度,强调!强调!强调!

提高的是加载速度而绝非运行速度。

python解释器会在__pycache__目录中下缓存每个模块编译后的版本,格式为:module.version.pyc。通常会包含python的版本号。

例如,在CPython3.3版本下,spam.py模块会被缓存成__pycache__/spam.cpython-33.pyc。这种命名规范保证了编译后的结果多版本共存。

Python检查源文件的修改时间与编译的版本进行对比,如果过期就需要重新编译。

这是完全自动的过程。

并且编译的模块是平台独立的,所以相同的库可以在不同的架构的系统之间共享,即pyc使一种跨平台的字节码,类似于JAVA火.NET,是由python虚拟机来执行的,但是pyc的内容跟python的版本相关,不同的版本编译后的pyc文件不同,2.5编译的pyc文件不能到3.5上执行,并且pyc文件是可以反编译的,因而它的出现仅仅是用来提升模块的加载速度的,不是用来加密的。

# python解释器在以下两种情况下不检测缓存

1. 如果是在命令行中被直接导入模块,则按照这种方式,每次导入都会重新编译,并且不会存储编译后的结果(python3.3以前的版本应该是这样)
    python -m spam.py

2. 如果源文件不存在,那么缓存的结果也不会被使用,如果想在没有源文件的情况下来使用编译后的结果,则编译后的结果必须在源目录下

sh-3.2  # ls
__pycache__ spam.py
sh-3.2  # rm -rf spam.py 
sh-3.2  # mv __pycache__/spam.cpython-36.pyc ./spam.pyc
sh-3.2  # python3 spam.pyc 
spam
 

# 提示:

1. 模块名区分大小写,foo.py与FOO.py代表的是两个模块
2. 你可以使用-O或者-OO转换python命令来减少编译模块的大小
    -O转换会帮你去掉assert语句
    -OO转换会帮你去掉assert语句和__doc__文档字符串
    由于一些程序可能依赖于assert语句或文档字符串,你应该在在确认需要
    的情况下使用这些选项。
3. 在速度上从.pyc文件中读指令来执行不会比从.py文件中读指令执行更快,只有在模块被加载时,.pyc文件才是更快的
4. 只有使用import语句是才将文件自动编译为.pyc文件,在命令行或标准输入中指定运行脚本则不会生成这类文件,因而我们可以使用compieall模块为一个目录中的所有模块创建.pyc文件

模块可以作为一个脚本(使用python -m compileall)编译Python源  
python -m compileall /module_directory 递归着编译
如果使用python -O -m compileall /module_directory -l则只一层

命令行里使用compile()函数时,自动使用python -O -m compileall
  
详见:https://docs.python.org/3/library/compileall.html#module-compileall

二、批量生成.pyc文件

import compileall

compileall.compile_dir('$dir')

其中,$dir 为Python源代码所在的目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编译Python文件? 的相关文章

随机推荐

  • Html+css(第二天)

    1 列表标签 场景 在网页中按照行展示关联性的内容 如 新闻列表 排行榜 账单等 特点 按照行的方式 整齐显示内容 种类 无序列表 有序列表 自定义列表 1 1 无序列表 场景 在网页中表示一组无顺序之分的列表 如 新闻列表 特点 列表的每
  • kubernetes集群部署springcloud项目【AL】

    kubernetes集群部署springcloud项目 AL 先手工做 非自动化 环境 192 168 73 138 master 192 168 73 139 node1 192 168 73 140 node2 192 168 73 1
  • 修改tomcat catalina.bat调整jvm内存及tomcat窗口标题

    开发这么久了 总会时不时碰到内存溢出的错误 知道应该去 catalina 中去设置一下jvm的内存大小 可是每次都忘记具体在哪个位置 而且 很多时候 出现内存溢出的环境都不是本机 而是服务器搭建环境的时候 而此时也没太多时间让自己去读一下
  • 一道模拟赛的题

    前言 这是一个不错的题啊 在这里记录一下 题意 听说不是原创题 那我就放上来了 应该没有关系吧QAQ 有一个 n m 的地图 地图上的每一个位置可以是空地 炮塔或是敌人 你需要操纵炮塔消灭敌人 对于每个炮塔都有一个它可以瞄准的方向 你需要在
  • 怎么将服务器上的文件变成共享文件,服务器上文件夹怎么共享

    服务器上文件夹怎么共享 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 CPH服务提供云手机批量控制功能 该功能可以通过A
  • 并发下的Map常见面试题

    HashMap 和 HashTable 有什么区别 java中的另一个线程安全的与HashMap极其类似的类是什么 同样是线程安全 它与HashTable在线程同步上有什么不同 HashMap 与 ConcurrentHashMap的区别
  • unityshader 消融效果

    代码 讲解都在注释上面了 冯乐乐的 unity shader 入门精要 相关知识 透明度 阴影计算 普通光照 法线贴图 Properties BurnAmount BurnAmount Range 0 1 0 LineWidth LineW
  • Web安全之SSRF漏洞

    内容 SSRF漏洞的危害 SSRF漏洞的挖掘 SSRF漏洞的防御 SSRF漏洞原理概述 背景 SSRF Server Side Request Forgery 服务器端请求伪造 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞 一般情况
  • kubernetes环境搭建

    kubernetes介绍 Kubernetes是Google在2014年6月开源的一个容器集群管理系统 使用Go语言开发 Kubernetes也叫K8S K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的 Borg已经在Go
  • python win32gui.FindWindow()找不到窗口(亲测有效)

    今天又是不聪明的小侦探热爱敲代码的一天 前言 今天来为大家解决win32gui FindWindow 找不到窗口的问题 本来打算制作一个游戏脚本 去网上找了点教程自学 遇到了使用win32gui FindWindow 语句能打开web等窗口
  • 算术收益率与对数收益率(几何收益率)

    日收益率 假设 Pt P t P t 为某一投资品种的净值 算术收益率 Pt 1 1 rt Pt P t 1
  • python中的pickle模块:序列化与反序列化

    pickle模块实现了数据序列和反序列化 pickle模块使用的数据格式是python专用的 能够把Python对象直接保存到文件中 而不需要把他们转化为字符串 也不用底层的文件访问操作把它们写入到一个二进制文件中 Pickle模块中最常用
  • UE4_Python_自动化导入素材脚本_音频_图片_FBX

    1 新建项目 开启插件 2 项目设置 gt Python 3 资源加载脚本 AssetFunctions py 目录跟上图的目录一致 导入FBX import unreal asset path E fireAxe FBX asset pa
  • Blender 3.5 面的操作(二)

    目录 1 面操作 1 1 面的切割 1 2 整体切分 1 3 面的法向 1 4 正面 背面 1 5 翻转法向 1 6 填充面 1 7 面倒角 1 8 循环面 1 9 X Ray 透视模式 1 面操作 1 1 面的切割 切割工具 Knife
  • 服务器vmware新建虚拟机教程,如何创建虚拟机教程全解

    这部分教程我们将学习的是如何创建虚拟机 在创建虚拟机之前 vSphere Client是必要的软件之一 它用于访问ESX主机或vCenter的图形管理用户界面 vSphere Client安装在Windows计算机上 它是与虚拟基础架构进行
  • eclipse的workspace删除

    在最近的一个爬虫项目中 发现build进程很慢 然后就换了个workspace 但还是很慢最后也出错了 然后想删除这个workspace 我尝试删除了F盘对应的workspace文件夹 但是令人不解的是 eclipse竟然还可以switch
  • linux上安装和启动docker

    1 安装Docker 这里我们将Docker安装到CentOS7上 最好是将yum更新下 sudo yum update 2 安装需要的软件包yum util 如果不安装则第三步会出现yum config manager command n
  • 性能测试---LoadRunner

    目录 1 LoadRunner对比Jmeter的优势 2 LoadRunner三个组件之间的关系 3 学习VUG的使用 3 1创建性能测试脚本并进行录制 第一步 打开VUG 创建一个新的性能测试的脚本 第二步 对新建的脚本进行设置 第三步
  • macbook pro适合python编程么_编程应该选macbook pro还是thinkpad T(从性能角度出发)?...

    谢邀 背景 工作中要是用Python C 和一点点Java 需要用到很多机器学习算法 首先我把几个机型的推荐款列一下 所有机型 8代CPU版本 仅推荐该系列i5款 ThinkPad X系列 推荐X390 个人认为X系列近几年最良心的产品 性
  • 如何编译Python文件?

    编译Python文件 一 编译Python文件 二 批量生成 pyc 文件 一 编译Python文件 为了提高加载模块的速度 强调 强调 强调 提高的是加载速度而绝非运行速度 python解释器会在 pycache 目录中下缓存每个模块编译