python编译pyc文件

python编译pyc文件什么是 pyc 文件 pyc 是一种二进制文件 是由 py 文件经过编译后 生成的文件 是一种 bytecode py 文件变成 pyc 文件后 加载的速度有所提高 而且 pyc 是一种跨平台的字节码 是由 python 的虚拟机来执行的 这个是类似于 JAVA 或者 NET 的虚拟机的概念 pyc 的内容 是跟 python 的版本相关的 不同版本编译后的 pyc 文件是不同的 2 5 编译的 pyc 文件 2 4 版本的 python 是无法执行的 什么是 pyo 文件 pyo 是优化编译后的程序 python O 源文件即可将源程序编译为 pyo 文件什

什么是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 程序

  1. 编译生成pyc文件,建议增加-O优化项
     python3 -O -m compileall -b . 
  2. 删除py文件
    find . -name "*.py"|xargs rm -rf 
  3. 删除__pycache__目录
    find . -name "__pycache__" |xargs rm -rf 
  4. 打成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://javaforall.net/217641.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:06
下一篇 2026年3月18日 上午9:07


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号