众所周知,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打包的二进制文件反编译

    简介 Pyhton是一个脚本语言,在运行Python代码时,最终由Python解释器来执行.解释器就是Python的运行环境,但是除了开发人员,大部分人在使用时并不会安装Python.所以官方就提供了 ...

  2. python读取python源代码文件_python 读写excel文件操作示例【附源码下载】

    本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...

  3. python读取python源代码文件_python 学习源码练习(2)——简单文件读取

    #文件创建 #!/usr/bin/python3 'makeTextFile.py--create text file' import os ls = os.linesep #get filename ...

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

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

  5. so文件反编译为python代码_【反编译系列】四、反编译so文件(IDA_Pro)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程 ...

  6. python读文件完整代码_Python读写文件的代码示例

    本篇文章给大家带来的内容是关于Python读写文件的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助 一.读取文件 读取文件步骤: 1.找到文件 2.打开文件 3.读取文件内容 ...

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

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

  8. Python程序编译与反编译

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

  9. myeclipse重新编译java,反编译class文件并重新编译的方法

    在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...

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

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

最新文章

  1. java 变量作用域 c语言_java - 数据结构 c语言 作用域问题
  2. cocos2d-x 帧动画学习
  3. app制作流程步骤_企业画册设计流程总结 告诉你画册制作步骤
  4. c语言创建链表存储10个数,C语言编写的建立单向int链表,连续输入10个结点创建链表,并实现在原链表中插入数字、删除数字、查找数字的功能...
  5. php测试插入,php – 使用Symfony测试数据库插入
  6. JAMA子刊:20来岁就要控制体重!分析超8万中国人数据发现,成年到中年体重每多增加10斤,老了之后死亡风险增加10%...
  7. python入门指南txt-十分钟搞定 C/C++ 项目自动化构建 —— Xmake 入门指南
  8. android移动开发慕课版本_Android移动开发基础教程(慕课版)
  9. 旅游景区如何利用优惠券提高客单价?
  10. java调用小冰,Java利用微软小冰API测颜值
  11. LimeSDR 中文教程 (一)
  12. ios微信多开 服务器,iOS微信双开(多开)
  13. 自动批量配音软件V2.6 附参数和使用教程
  14. 固定linux虚拟机ip地址,虚拟机下linux 系统网卡配置、固定IP地址
  15. Java GUI项目,一个练手的泡泡龙小游戏
  16. 半物理仿真系统——EPB HIL系统解决方案
  17. 出门问问AIGC SaaS平台亮相数贸会 赋能内容创作全流程
  18. 蓝桥杯Web应用开发
  19. java二分排序算法
  20. Spark零基础入门实战(一)Scala安装

热门文章

  1. 一道abc+cba=1333的问题
  2. 拓端tecdat|R语言缺失值的处理:线性回归模型插补
  3. 拓端tecdat|R语言无监督学习:PCA主成分分析可视化
  4. 拓端tecdat|Python使用矩阵分解法找到类似的音乐
  5. 深度学习(二十一)基于FCN的图像语义分割-CVPR 2015
  6. 55种开源数据可视化工具简介
  7. 决用 Anaconda 完美解 Python2 和 python3 共存问题
  8. 计算机网络 五层网络协议各司其职,一次讲清楚
  9. java数据读取容量,spring batch使用reader读数据的内存容量问题详解
  10. android 多线程互斥,Android同步类:Mutex和Condition