Python已经成为耳熟能详的编程语言,得益于其友好、简洁、万物皆对象的特性,逐渐成为“国民工具”。然而,Python相比编译型语言,如C语言,运行速度并不理想。但是其本身也有提高速度的方式—编译成.pyc
格式的字节码文件。它的好处是直接由解释器执行.pyc
,速度更快;可以隐藏待发布的程序细节,让别人不能直接看到代码内容。本文将介绍下.pyc
文件的相关知识。
首先我们需要介绍下Python的特点:
其中,.pyc
文件是py文件编译后生成的字节码文件(byte code)。.pyc
文件经过python解释器最终会生成机器码运行,所以.pyc
文件是可以跨平台部署的。在我们运行python文件的时候,首先就会自动查看是否具有.pyc
文件,如果有的话,而且.py
文件的修改时间和.pyc
的修改时间一样,就会读取.pyc
文件,否则,Python就会读原来的.py
文件。
.pyc
文件是由.py
文件经过编译后生成的字节码文件,其加载速度相对于之前的.py
文件有所提高;当我们运行python文件程序的时候,Python解释器将源码转换为字节码,然后再由解释器来执行这些字节码,整体执行流程如下:
分为编译单个文件和多个文件,通过命令行操作如下:
# 单个文件
python -m py_compile 脚本.py
# 多个文件
python -m compileall 脚本文件所在目录
通过IDLE操作如下:
# 单个文件
import py_compile
py_compile.compile(r'脚本.py')
# 多个文件
import compileall
compileall.compile_dir(r'脚本文件所在目录')
运行pyc
python 脚本.pyc
解释器首先将其编译为字节码(这是过度简化)并将其存储在__pycache__文件夹中。如果你查看那里你会发现一堆文件在项目文件夹中共享.py
文件的名称,只有它们的扩展名为.pyc
。它们分别是程序文件的字节码编译版本。
尽管产生了编译文件,但是这些文件与源代码不在同一目录,可能会带来调用问题。因此常常使用如下方式产生同级目录下的.pyc
文件:
python -m compileall -b . # 在脚本所在目录下运行
加上参数-b
就可以了。
在实际发布程序时,可遵循如下几步:
python3 -O -m compileall -b .
find . -name "*.py"|xargs rm -rf
find . -name "__pycache__" |xargs rm -rf
cd ..
tar -cjvf xxx.1.1.0.0.tar.bz2 xxx
此外还有.pyd、.pyo格式,具体差异可查看:
https://stackoverflow.com/questions/8822335/what-do-the-python-file-extensions-pyc-pyd-pyo-stand-for
本文分享自 Python数据分析实例 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!