Python源码保护[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君
由于Python开源的特性,在一些商业场景下,若不想将源码暴露,可通过混淆、编译为pyc或so(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版本,不一致可能会发生错误。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172346.html原文链接:https://javaforall.cn
相关文章
- jupyter和python的关系_jupyter notebook和python
- Python-基础05-字符编码
- pycharm中pyqt5使用方法_python环境变量的配置
- Python-基础06-文件操作
- crontab 用法(执行python文件)[通俗易懂]
- pycharm中使用anaconda部署python环境_anaconda虚拟环境是什么
- python+selenium环境搭建_pycharm配置anaconda环境
- pycharm无法使用第三方库_python第三方库安装失败
- Python求逆矩阵_3x3下三角矩阵求逆矩阵
- pycharm安装opencv-python_geany配置python
- pycharm安装no interpreter_no python interpreter configured
- Linux 上使用 crontab 设置定时任务及运行 Python 代码不执行的解决方案
- pip安装scrapy失败_python的scrapy框架的安装
- Python进阶41-drf框架(三)
- ubuntu用pip离线安装python第三方库
- Python 调用接口进行文件上传的踩坑记录
- pycharm自带python环境吗_Python IDE环境之 新版Pycharm安装详细教程[通俗易懂]
- python+pytorch_pytorch linear函数
- Python源码保护[通俗易懂]
- Python-drf前戏38.3-前端Vue03