Python 并非完全是解释性语言,它也存在编译。先将源码文件 *.py 编译为 *.pyc,然后由 Python 的虚拟机执行。相对于 *.py 文件来说,编译为 *.pyc本质上和 *.py 没有太大区别,只是提高了模块的加载速度,并没有提高代码的执行速度。

生成 *.pyc 文件

要编译为 *.pyc 文件,需要安装compile模块:

pip install compile
Collecting compileDownloading compile-1.0.3.tar.gz (6.0 kB)
Building wheels for collected packages: compileBuilding wheel for compile (setup.py) ... doneCreated wheel for compile: filename=compile-1.0.3-py3-none-any.whl size=6547 sha256=d4ee7be709d3280af20a669a934784c1abe2051797b99ca81eaaef22baf116e2Stored in directory: c:\users\anonym\appdata\local\pip\cache\wheels\ec\c9\48\b5caf5b67a5ae3bd2dc854aefe766aafeaad244b863792ef32
Successfully built compile
Installing collected packages: compile
Successfully installed compile-1.0.3

生成单个文件

python -m py_compile test.py

生成多个文件

python -m compile all E:\Python\Paddle\PaddleClas\ppcls\modeling\architectures

反编译 pyc

首先安装库 uncompyle:

pip install uncompyle
Collecting uncompyleDownloading uncompyle-2.0.0-py2.py3-none-any.whl (2.2 kB)
Collecting uncompyle6Downloading uncompyle6-3.7.4-py3-none-any.whl (316 kB)|████████████████████████████████| 316 kB 10 kB/s
Collecting spark-parser<1.9.0,>=1.8.9Downloading spark_parser-1.8.9-py38-none-any.whl (18 kB)
Collecting xdis<5.1.0,>=5.0.4Downloading xdis-5.0.9-py2.py3-none-any.whl (129 kB)|████████████████████████████████| 129 kB 1.4 kB/s
Requirement already satisfied: click in c:\program files\python\python38\lib\site-packages (from spark-parser<1.9.0,>=1.8.9->uncompyle6->uncompyle) (8.0.1)
Requirement already satisfied: six>=1.10.0 in c:\program files\python\python38\lib\site-packages (from xdis<5.1.0,>=5.0.4->uncompyle6->uncompyle) (1.16.0)
Requirement already satisfied: colorama in c:\program files\python\python38\lib\site-packages (from click->spark-parser<1.9.0,>=1.8.9->uncompyle6->uncompyle) (0.4.4)
Installing collected packages: xdis, spark-parser, uncompyle6, uncompyle
Successfully installed spark-parser-1.8.9 uncompyle-2.0.0 uncompyle6-3.7.4 xdis-5.0.9

命令行如下:

uncompyle6 .pyc > .py

关于效率

关于效率,Python 文档 “Compiled” Python files 中这样介绍:

A program doesn’t run any faster when it is read from a .pyc or .pyo file than when it is read from a .py file; the only thing that’s faster about .pyc or .pyo files is the speed with which they are loaded.

也就是说,".py"和"pyc"运行速度相差无几,加载速度 *.pyc 稍占优势。

当然,除此之外,还有一个很大的优点:隐藏源码!

Python编译、运行、反编译pyc文件相关推荐

  1. python源代码的后缀名是_Python代码编译与反编译

    众所周知,Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议.那么很自然会有人有这样的疑问:难道Python程序只能以 ...

  2. python防反编译_Python - 浅谈Python的编译与反编译

    1 - Python编译过程涉及的文件 py 源代码文件,由python.exe解释,可在控制台下运行,可用文本编辑器进行编辑: pyc 源代码文件经过编译后生成的二进制文件,无法用文本编辑器进行编辑 ...

  3. 浅谈Python的编译与反编译

    1 - Python编译过程涉及的文件 py 源代码文件,由python.exe解释,可在控制台下运行,可用文本编辑器进行编辑: pyc 源代码文件经过编译后生成的二进制文件,无法用文本编辑器进行编辑 ...

  4. Python程序编译与反编译

    众所周知,Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议.那么很自然会有人有这样的疑问:难道Python程序只能以 ...

  5. Python - 浅谈Python的编译与反编译

    1 - Python编译过程涉及的文件 py 源代码文件,由python.exe解释,可在控制台下运行,可用文本编辑器进行编辑: pyc 源代码文件经过编译后生成的二进制文件,无法用文本编辑器进行编辑 ...

  6. 谈谈Python的编译和反编译

    用Python写脚本,小程序可谓非常方便,但它需要有特定的python环境才能运行,因此如果你想在别的电脑上运行时就会出现许多问题,就算已经安装了Python,但版本可能相差较大,且相关的依赖库没有安 ...

  7. 总结python源文件编译、反编译、加密混淆

    本文更新地址 一.编译 1. 编译为 pyc 2. 编译为 pyo 或者 opt-n.pyc 文件 3. 编译成 pyd 或 so 链接库 编译方法一 编译方法二 编译方法三 使用建议 二.打包 1. ...

  8. python编译和反编译

    结论:从反编译的角度来看,想通过把.py 明文文件编译为.pyc二进制文件的方式,达到对python源码保密的目的是不可行的. 文章目录 1. 文件结构 2. 编译 3. 反编译 4. 总结 1. 文 ...

  9. 方便无阻且全面的python程序exe反编译,可以不使用十六进制编辑器完成的常规反编操作

    Python源代码能够被pyinstaller打包为脱离Python环境的exe可执行文件,然而,在有些特殊情况下,比如剖析病毒,数据恢复,需要反过来把可执行文件反编译为Python源代码,这个过程是 ...

  10. java在控制台中的反编译指令,反编译class-class文件反编译工具 v0.3.7免费版

    反编译class class文件反编译工具是一款class文件反向编译的java工具,它能够将class文件逆向编译为java语言.此款软件比较小巧,特别适合初学者使用,感兴趣的赶紧下载啊! clas ...

最新文章

  1. 7.5. Zend Optimizer
  2. 什么是 jQuery 事件
  3. 数据字典在sga的哪一个组件中缓存_【赵强老师】Oracle数据库的内存结构
  4. 作为一个普通人的日常
  5. Oracle HTTP 乱码
  6. Python源码深度解析—对象的创建
  7. (0.2.2)如何下载mysql数据库(二进制、RPM、源码、YUM源)
  8. linux 下安装 vim
  9. android 结算权限,如何在Android应用程序中实施应用内结算?
  10. ROS 教程——从入门到入土
  11. 中小型企业网络IP地址规划案例
  12. 古代物流是如何进行的?
  13. 51单片机控制的数字温度计 PROTEUS 和51单片机教程
  14. mathematica-基于过程编程
  15. 【Qualcomm高通音频】如何使用QXDM、QCAT音频数据抓取
  16. 谈谈我对opencv中IplImage图像参数widthstep的理解
  17. 纯JSP简单登录实例
  18. 没事也研究一下外挂--C#简单游戏外挂制作(以Warcraft Ⅲ为例)
  19. 如何学会战略性思维?
  20. loadlibrary 失败的解决方法

热门文章

  1. Linux 命令(96)—— ln 命令
  2. MySQL性能优化 分区
  3. .NET Core 管道
  4. Oracle统计某一年中的1-12个月的数据总和
  5. C/C++ Memory Layout
  6. 机器学习基石(1)--The Learning Problem
  7. thymeleaf的url属性
  8. 在线base64加密解密工具
  9. linux之type命令
  10. 【window】Windows10下为PHP安装redis扩展