由于Python开源的特性,在一些商业场景下,若不想将源码暴露,可通过混淆、编译为pycso(Windows下为pyd)文件等方法起到保护源码的效果。其中,将源码编译为so文件是常用且较好的一种保护方法。

1 混淆

  代码混淆是将函数、类名和变量名等替换为其他符号,提高了阅读的难度。Oxyry网站提供的在线代码混淆(或使用pyminifier),如下图所示:

  代码混淆简单且成本代价低,但由于未改变程序的主体结构,仅降低代码的可读性,实际对源码的保护并不是很好。

2 pyc

  pyc是Python脚本编译后形成的字节文件。生成后的pyc文件可以直接替换对应的py文件。但需注意Python编译版本与运行版本需要一致。pyc生成并使用流程如下:
  1)通过Python标准库中py_compile(或compileall)或被调用的脚本(如A.py被调用),都将在__pycache__文件夹中生成pyc文件,py_compile使用代码如下:

import py_compile
py_compile.compile(file="xxx.py") # 需转换为pyc文件在——__pycache__中

  2)将pyc文件直接替换对应py文件

  与其他语言相同,pyc也可以通过反编译获取源码。pyc反编译反编译通过uncompyle6,使用如下所示:

# 安装
pip install uncompyle6
# 使用
uncompyle6 xxx.pyc

3 so或pyd

  so(pyd是windows平台)文件是通过cython转换为c后,再进行编译形成的文件。生成so并使用流程如下:

  1)安装cython,Linux平台需安装gcc,Windows平台需安装对应版本的Visual Studio

pip install cython

  2)新建一个build.py文件,内容如下

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("xxx.py"))  # xxxe.py是需要转换pyd的py文件

  3)在终端下,输入如下命令:

python build.py build_ext

so文件在目录下的build->lib命名开头文件夹中,如下图so文件在build/lib.macosx-10.7-x86_64-3.6中:


  4)将so(或pyd)文件直接替换对应的py文件
  相对混淆和pyc,so(或pyd)对保护效果最好的一种方案。但在使用时,需注意Python版本gcc版本,不一致可能会发生错误。

Python源码保护相关推荐

  1. python 源码保护_Python代码保护

    Python等解释性脚本语言都需要源码明文存储,所以有两种情况需要考虑代码保护的问题: 代码逻辑的保护:代码本身有版权或者不能公开源代码 涉及用户名.密码等关键信息的配置 代码保护方法 Python代 ...

  2. essential c++源码_Goldenmask - 一键化保护你的 Python 源码

    项目地址: https://github.com/youngquan/goldenmask​github.com Goldenmask 直译为金色的罩子,灵感来自"金钟罩"的&qu ...

  3. python源码只有编译成二进制_setup-cython(2):把Python打包成二进制应用吧

    代码近过Cython化之后,安全性得到了提高,那么紧接着自然就会有一个不得不面对的事情,如何把我们写好的应用发布给别人呢? Java可以直接打包成Jar.微软系的天生就能打包成exe,而Go则非常的舒 ...

  4. python源码加密实现

    本文参考如何保护你的 Python 代码对其想法进行实现. 源码地址:spython@github RAYENCRY rayencry使用AES算法对指定目录中的Python源码加密. 内容 背景 安 ...

  5. python编译器源码_编译python源码

    广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! 尝试通过源码自己编译 python,使用的系统是 ubuntu14.04 l ...

  6. Python源码学习:多线程实现机制

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 本文分析Python中的多线程机制,主要通过一个多线程的脚本来分析多线程的基本操作与 ...

  7. Python源码学习:Python类机制分析-用户自定义类

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一文,分析了Python在启动初始化时,对内置类的一个基本的初始化流程,本文就简析 ...

  8. Python源码学习:Python类机制分析

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 本文主要分析Python中类时如何实现的,在Python中,一切都是对象:任何对象都 ...

  9. Python源码学习:Python函数浅析-函数闭包

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇分析了函数参数的分析后,本文分析函数闭包的实现.函数闭包即函数定义和函数表达式 ...

  10. Python源码学习:Python函数浅析-有参函数

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 继续上一篇无参函数的调用后,本文将分析Python中的有参函数的大致流程,在Pyth ...

最新文章

  1. 有序的Map集合--LinkedHashMap
  2. 如何通过命令终端访问本地/局域网/远程的MySQL数据库_访问数据库_连接数据库_登录数据库
  3. mysql5.6.35安装_mysql5.6.35 二进制快速安装
  4. 程序员5年工作经验,因频繁跳槽被面试官压工资!
  5. 用Python绘制一套“会跳舞”的动态图形给你看看
  6. AsyncTask实现登录功能,上传图片,get,post
  7. 死锁 操作系统第二章知识点归纳总结
  8. c语言函数的参数是结构变量,何去运用结构体变量和结构的变量的指针作为函数的参数...
  9. paip.提升安全性---网站各种验证码特点及识别率
  10. VB6.0精简版调用matlab进行数值计算:
  11. UAT,(user acceptance Test),用户接受度测试 标准步骤
  12. 朋友圈加粗字体数字_如何让你的朋友圈骚到脱颖而出?
  13. 【裴礼文数学分析】例1.2.4
  14. 苹果手机怎么投屏不了,苹果手机怎么投屏电脑
  15. echarts使用e_macarons方法
  16. html扫码支付,WEB端第三方支付接入 - 支付宝 - 扫码支付
  17. java并发-ReentrantReadWriteLock读写锁
  18. HBase的java代码开发(完整源码)
  19. 世界地图nameMap
  20. Linux非交互式修改用户密码

热门文章

  1. Cesium gltf(1.70)三维人物动画制作
  2. DSD解码ES9038PRO和AK4497
  3. Java Keytool工具简介
  4. FreeCAD 导出STL格式文件格式
  5. 简述ip地址的abc类如何划分_ip地址的分类abc类的具体含义与分类方法
  6. 斐讯路由器使用说明,校园网破解,breed控制台,华硕固件
  7. 红山区智慧城管系统正式上线运行
  8. 利用栈来完成表达式求值
  9. 饥荒联机版服务器启动慢_饥荒联机版大型攻略——简介与目录
  10. 低功耗验证 (二)UPF,低功耗流程,VCS NLP