python编译pyc文件的过程解析
作者:csdn__Dong 时间:2022-08-13 20:48:19
什么是pyc文件
pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。
什么是pyo文件
pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件
什么是pyd文件
pyd是python的动态链接库。
为什么需要pyc文件
这个需求太明显了,因为py文件是可以直接看到源码的,如果你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。当然,pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同的,根据python源码中提供的opcode,可以根据pyc文件反编译出 py文件源码,网上可以找到一个反编译python2.3版本的pyc文件的工具,不过该工具从python2.4开始就要收费了,如果需要反编译出新版本的pyc文件的话,就需要自己动手了(俺暂时还没这能力–),不过你可以自己修改python的源代码中的opcode文件,重新编译 python,从而防止不法分子的破解。
生成单个pyc文件
python就是个好东西,它提供了内置的类库来实现把py文件编译为pyc文件,这个模块就是 py_compile 模块。
使用方法非常简单,如下所示,直接在idle中,就可以把一个py文件编译为pyc文件了。(假设在windows环境下)
通过IDLE操作如下
## 单个文件测试
>>> import py_compile
>>> py_compile.compile(r'D:\hello.py')
'D:\\__pycache__\\hello.cpython-39.pyc'
>>>
# 单个文件
import py_compile
py_compile.compile(r'脚本.py')
# 多个文件
import compileall
compileall.compile_dir(r'脚本文件所在目录')
-命令行操作如下
# 单个文件
python -m py_compile 脚本.py
# 多个文件
python -m compileall 脚本文件所在目录
如下图是编译多个脚本(其实是忘记加路径了,直接编译了当前目录,尴…,)
运行pyc
python 脚本.py
_pycache__文件夹
解释器首先将其编译为字节码(这是过度简化)并将其存储在__pycache__文件夹中。如果你查看那里你会发现一堆文件在项目文件夹中共享.py文件的名称,只有它们的扩展名为.pyc。它们分别是程序文件的字节码编译版本。
尽管产生了编译文件,但是这些文件与源代码不在同一目录,可能会带来调用问题。因此常常使用如下方式产生同级目录下的.pyc文件:
python -m compileall -b . # 在脚本所在目录下运行
发布python 程序
编译生成pyc文件,建议增加-O优化项
python3 -O -m compileall -b .
删除py文件
find . -name "*.py"|xargs rm -rf
删除__pycache__目录
find . -name "__pycache__" |xargs rm -rf
打成tar包
cd ..
tar -cjvf xxx.1.1.0.0.tar.bz2 xxx
参考文档
https://docs.python.org/3.9/library/compileall.html
https://finthon.com/python-pyc/
来源:https://blog.csdn.net/BXD1314/article/details/120050328
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python中文件操作与异常的处理图文详解
![](https://img.aspxhome.com/file/2023/2/78822_0s.jpg)
PHP html_entity_decode()函数讲解
![](https://img.aspxhome.com/file/2023/4/55384_0s.png)
在python里创建一个任务(Task)实例
解决python3读取Python2存储的pickle文件问题
python使用turtle库绘制时钟
![](https://img.aspxhome.com/file/2023/6/72856_0s.jpg)
Python实现暴力破解wifi密码并打包成exe
![](https://img.aspxhome.com/file/2023/6/67776_0s.png)
python中 _、__、__xx__()区别及使用场景
Python文字截图识别OCR工具实例解析
![](https://img.aspxhome.com/file/2023/0/63920_0s.png)
SQL Server 2005数据库批量更新解决办法
关于Python 中的时间处理包datetime和arrow的方法详解
用ASP判断客户端浏览器语言自动跳转
Pandas 模糊查询与替换的操作
![](https://img.aspxhome.com/file/2023/3/104863_0s.jpg)
Python脚本调试工具安装过程
![](https://img.aspxhome.com/file/2023/6/103296_0s.jpg)
Python实现提取音乐频谱的方法详解
![](https://img.aspxhome.com/file/2023/2/72072_0s.jpg)
关于matplotlib及相关cmap参数的取值方式
![](https://img.aspxhome.com/file/2023/7/98807_0s.png)
形成视觉冲击的几种方式
![](https://img.aspxhome.com/file/UploadPic/20088/3/200883164413717s.jpg)