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

python源代码的后缀名是_Python代码编译与反编译相关推荐

  1. python源代码的后缀名是什么_Python

    [单选题]Python 源代码文件的后缀为( ). [单选题]/etc/passwd和/etc/shadow两个文件的权限正确的是( ) [单选题]修改以太网卡mac地址的命令为( ). [单选题]关 ...

  2. 用python批量修改后缀名

    今天刚接触了一下python,觉得python和java的语言有很大不同.虽然厚实面向对象,但是写法有很大区别.相比较java的大量的声明和实例化,python则简介了很多.学起来也蛮有趣的.根据网上 ...

  3. Python读取.dat后缀名文件

    Python读取.dat后缀名文件 .dat文件基本上是没有任何头的二进制文件.对于每个样本,它由(256,256,3)个uint8图像,(64,64,1)uint8深度图和1个uint8标签组成.T ...

  4. python删除指定后缀名的文件

    python删除指定后缀名的文件 最近ev加密视频转成mp4后,一个个删除ev文件很麻烦,所以决定写个脚本删除掉 # -*- code:utf-8 -*- """ @fi ...

  5. Java代码的编译与反编译那些事儿

    GitHub 2.5k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 2.5k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 2.5k Star 的 ...

  6. Python程序编译与反编译

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

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

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

  8. java反编译是什么_什么是Java代码的编译与反编译?

    Java代码的编译与反编译 2017-02-21 Hollis 数盟 一.什么是编译 1.利用编译程序从源语言编写的源程序产生目标程序的过程. 2.用编译程序产生目标程序的动作. 编译就是把高级语言变 ...

  9. springboot项目代码混淆和反编译教程·附软件连接

    对springboot项目进行代码混淆,可以防止别人通过反编译项目查看代码,即使反编译了查看的也是混淆后的看不懂的代码. 一定程度保证了项目源码安全性. 下面分享代码混淆步骤和反编译操作 Allato ...

最新文章

  1. LeetCode 454 4Sum II(哈希法)
  2. Microsoft.Bcl.Build 1.0.10 稳定版发布
  3. 技术内参 | 数据分析,如何解决精度丢失的问题?
  4. HOJ 2278 IP Filtering (二分)
  5. Web前端到底需要学什么?应该怎么学?
  6. 由于权限不足而无法读取配置文件出现的HTTP 500.19解决办法
  7. spring json
  8. 对mysql的各种sql语句如何对表加锁的实验
  9. git 修改分支名字_基础Git操作与GitHub协作吐血整理,收好!| 原力计划
  10. 洛谷P1126 机器人搬重物【bfs】
  11. 韩国遭 Lazarus Group 供应链攻击
  12. U盘量产工具_修复、U盘写保护无法格式化、U盘文件乱码格式
  13. AMAZON SP API Feed
  14. Get the information of all heroes in the League of Legends through the crawler.
  15. 用matlab 计算范德蒙德行列式,行列式计算范德蒙德行列式
  16. c语言计时纳秒_如何利用rdtsc计算纳秒级的时间
  17. 2017年Go语言入门教程-徐培成-专题视频课程
  18. 数学专业英语 -- 组合分析和数值分析
  19. 数据结构复习 ---- 邻接表
  20. win7重装mysql_win7(64位)彻底卸载mysql,重装不再烦恼

热门文章

  1. edge新版 能够正则式_Python爬虫七 数据提取之正则
  2. jittor 训练手写数字识别(mnist)
  3. 中国交通标志识别,德国交通标志识别
  4. MediaCodec 解码后数据对齐导致的绿边问题
  5. 大规模深度学习预测场景下 codegen 的思考与应用
  6. shell特殊符_cut命令 sort_wc_uniq命令tee_tr_split命令 shell特
  7. 在直播问题上,智能电视们不应该沉默
  8. java实现生产者和消费者模式
  9. 51CTO博客弹出框精彩博文记录【2013年第二季度】
  10. Oracle导表语句