众所周知,Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。那么很自然会有人有这样的疑问:难道Python程序只能以源代码的方式来运行吗,能不能通过某种方式来保护自己的源代码呢?答案是肯定的。这方面的技术主要有两种:一种方法是把Python程序伪编译成扩展名为.pyc的字节码文件,一种是通过py2exe、pyinstaller或者cx_Freeze对Python程序进行打包。之前的文章中Python安装扩展库与打包成exe可执行文件的方法已经介绍了打包的有关内容,本文主要介绍Python代码编译与反编译。

可以使用py_compile模块的compile()函数或compileall模块的compile_file对Python源程序文件进行编译得到扩展名为.pyc的字节码以提高加载和运行速度,同时还可以隐藏源代码。以Stack.py文件为例,常用的编译方法有(假设已导入py_compile模块):

  • py_compile.compile('Stack.py')

这种形式等价于compileall.compile_file('Stack.py'),也等价于在命令提示符环境中执行命令python -m py_compile Stack.py,都会在Python安装路径下的__pycache__文件夹中生成文件Stack.cpython-35.pyc

  • py_compile.compile('Stack.py', optimize=1)

这种形式等价于compileall.compile_file('Stack.py', optimize=1),也等价于在命令提示符环境中执行命令python -O -m py_compile Stack.py,属于优化编译,会在Python安装路径下的__pycache__文件夹中生成Stack.cpython-35.opt-1.pyc文件。

  • py_compile.compile('Stack.py', optimize=2)

这种形式等价于compileall.compile_file('Stack.py', optimize=2),也等价于在命令提示符环境中执行命令python -OO -m py_compile Stack.py,属于高级优化编译,会在Python安装路径下的__pycache__文件夹中生成文件Stack.cpython-35.opt-2.pyc

此外,Python的compileall模块还提供了compile_dir()和compile_path()等方法,用来支持批量Python源程序文件的编译。

那么问题来了,是不是编译成.pyc文件以后真的无法查看源代码呢?很遗憾,还是有很多办法可以查看的,可以使用Python扩展库uncompyle6或其他类似模块来实现。使用pip工具安装uncompyle6之后,可以使用下面的代码对上面生成的.pyc文件进行反编译得到源代码:

uncompyle6.uncompyle_file('__pycache__\\Stack.cpython-35.opt-1.pyc', open('__pycache__\\Stack.py', 'w'))

另外,http://tool.lu/pyc/这个网站就可以在线上传一个.pyc文件然后立刻得到Python源代码。

Python程序编译与反编译相关推荐

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

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

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

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

  3. 《编译与反编译技术》—第1章1.7节C语言程序的编译流程

    本节书摘来自华章出版社<编译与反编译技术>一书中的第1章,第1.7节C语言程序的编译流程,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问云栖社区"华章计算机"公 ...

  4. 保护小程序,防止反编译:打造不怕反编译的小程序

    保护小程序,防止反编译 打造不怕反编译的小程序 这几年,小程序.小游戏,非常火. 业内人都知道,小程序或小游戏,就是H5应用,就是html+JS.这类应用,反编译很容易,网上就有很多方法教程. 对小程 ...

  5. 微信小程序抓包反编译保姆级教程

    文章目录 1.基本采集流程 2.采集流程 2.1 抓包 2.1.1 抓包背景介绍 2.1.2 使用工具 2.1.3 具体抓包流程 2.2 wxapkg包获取 2.2.1 wxapkg包获取背景介绍 2 ...

  6. 微信小程序源码反编译

    @IT猴~ 写有用的文章 微信小程序源码反编译 亲测有效,能返编译市面上百分之90的小程序.准备: 1.夜神模拟器 2.node.js 3.微信 夜神模拟器 夜神模拟器官网: https://www. ...

  7. python编译和反编译

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

  8. 微信小程序渗透测试技巧-小程序解包-反编译

    微信小程序渗透测试技巧-小程序解包-反编译 简述 安装手机模拟器,比如说夜神.MuMu 下载和安装两个应用,微信和RE文件管理器 获取root权限 打开微信,搜索相对应的小程序,然后再打开RE文件管理 ...

  9. Java——编译与反编译

    ** 一.基础知识 ** 1.1 编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级 ...

最新文章

  1. Python3学习笔记(二):基本数据类型
  2. 谈吉日嘎拉的《白话反射技术》及其他(吵架篇)
  3. AI:2020年6月23日北京智源大会演讲分享之AI创业专题论坛——09:10-10:00 李开复教授《AI赋能时代的创业》
  4. javascript window.confirm确认 取消对话框实现代码小结
  5. 改工作空间_打拼六年换的新房,装修花了17万,飘窗改柜子很实用,谁见过?...
  6. Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别
  7. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现
  8. Qt|C++-最简单的OpenGL(变颜色的三角形)
  9. 归并排序,我举个例子你就看懂了
  10. python消息队列celery_python异步任务神器celery
  11. 区块链技术指南:常见问题
  12. edius隐藏快捷键_EDIUS素材隐藏快捷键是什么啊?
  13. 尚学堂马士兵struts2 课堂笔记(四)
  14. IDEA中解决Spring 配置文件未受管束问题,提示:Unmapped Spring configuration files found
  15. 使用WinWedge软件记录satorius天平的数据(记录)
  16. 车载产品Bootloader功能的应用与实现
  17. Matlab:图像轮廓的曲率计算
  18. Arduino(3) Mega2560和外部设备SPI通信
  19. POI报表——模板打印 AND 海量数据导出
  20. 服务器机柜性能指标,【机柜】机柜主要技术参数要求

热门文章

  1. php 许愿墙 阶段案例_文化墙制作要突出企业哪些重点?
  2. oracle容器部署,Linux docker oracle 部署
  3. linux 监控命令iostat,Linux性能监控分析命令(三)—iostat命令介绍
  4. php 反射 调用私有方法,PHP通过反射方法调用执行类中的私有方法
  5. java接口是静态_Java接口(静态方法、私有方法)
  6. 单片机与普通微型计算机的不同之处是什么,单片机与普通微型计算机的不同之处...
  7. java 动态数据源切换,Java+Spring+MyBatis实现多数据源的动态切换
  8. java中Jackson_在Java中使用Jackson的JSON模式支持?
  9. 基于JAVA+Servlet+JSP+MYSQL的网上心理咨询系统
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的仓库物品管理系统