Cython保护Python代码
注:.pyc也有一定的保护性,容易被反编译出源码...
项目发布时,为防止源码泄露,需要对源码进行一定的保护机制,本文使用Cython将.py文件转为.so进行保护。这一方法,虽仍能被反编译,但难度会比较大。另外,Cython是Python的超集。
自行安装Cython
1,创建complie.py文件
from Cython.Build import cythonize
from Cython.Distutils import build_ext
from setuptools import setup
from setuptools.extension import Extension setup(
ext_modules=cythonize(
[
Extension('project.*', ['project/*.py']),
Extension('project.api.*', ['project/api/*.py']),
Extension('project.api.bizs.*', ['project/api/bizs/*.py']),
Extension('project.api.data.export*', ['project/api/data/export/*.py']),
Extension('project.api.exceptions.*', ['project/api/exceptions/*.py']),
# 需要保护的.py文件目录写在此处
],
build_dir='build',
compiler_directives=dict(
always_allow_keywords=True, language_level=3
)
),
cmdclass=dict(
build_ext=build_ext
)
)
language_level代表python版本,python2就写2
2,运行命令:python compile.py build_ext --inplace
将会在各目录生成每个.py文件的.so文件,和一个build文件夹。.py文件已经被保护了,.so文件之间可以相互调用。
部署时删除项目中.py文件、build文件夹。
如果项目中使用了celery,注意不要编译celery代码,否则celery将无法使用。
贴一个shell脚本,配合上段代码使用。
#!/bin/bash # 清除缓存目录
find . -type d -name __pycache__ | xargs rm -rf # 编译代码
python3 -m venv env
sh env/bin/activate
python3 compile.py build_ext --inplace
if [ $? -ne ]; then
exit
fi # 更改celery文件
mv ./project/api/tasks/cele/__init__.py ./project/api/tasks/cele/__init__.py.bak
mv ./project/api/tasks/cele/base.py ./project/api/tasks/cele/base.py.bak
mv ./project/api/tasks/cele/export.py ./project/api/tasks/cele/export.py.bak
mv ./project/api/tasks/__init__.py ./project/api/tasks/__init__.py.bak
mv ./project/api/tasks/dispatch_subdomain.py ./project/api/tasks/dispatch_subdomain.py.bak
mv ./project/api/tasks/recognize_area.py ./project/api/tasks/recognize_area.py.bak # 将.so文件改名
find ./project -name '*.so' | awk -F '.cpython-36m-x86_64-linux-gnu' '{print "mv "$0" "$1$2}' | sh # 删除.py文件
find ./project -name '*.py' | xargs rm -f mv ./project/api/tasks/cele/__init__.py.bak ./project/api/tasks/cele/__init__.py
mv ./project/api/tasks/cele/base.py.bak ./project/api/tasks/cele/base.py
mv ./project/api/tasks/cele/export.py.bak ./project/api/tasks/cele/export.py
mv ./project/api/tasks/__init__.py.bak ./project/api/tasks/__init__.py
mv ./project/api/tasks/dispatch_subdomain.py.bak ./project/api/tasks/dispatch_subdomain.py
mv ./project/api/tasks/recognize_area.py.bak ./project/api/tasks/recognize_area.py # 清除不需要的文件
rm -rf build
rm -f .gitignore
rm -f compile.py
rm -f build.sh
END!
Cython保护Python代码的更多相关文章
- 利用Cython对python代码进行加密
利用Cython对python代码进行加密 Cython是属于PYTHON的超集,他首先会将PYTHON代码转化成C语言代码,然后通过c编译器生成可执行文件.优势:资源丰富,适合快速开发.翻译成C后速 ...
- [转]使用Cython来保护Python代码库
转自:http://blog.csdn.net/chenyulancn/article/details/77168621 最近,我在做一个需要使用Cython来保护整个代码库的Python项目. 起初 ...
- 用Cython加速Python代码
安装Cython pip install Cython 如何使用 要在我们的笔记本中使用Cython,我们将使用IPython magic命令.Magic命令以百分号开始,并提供一些额外的功能,这些功 ...
- 如何保护你的 Python 代码 (一)—— 现有加密方案
https://zhuanlan.zhihu.com/p/54296517 0 前言 去年11月在PyCon China 2018 杭州站分享了 Python 源码加密,讲述了如何通过修改 Pytho ...
- [转帖]如何保护你的 Python 代码 (一)—— 现有加密方案
如何保护你的 Python 代码 (一)—— 现有加密方案 Prodesire Python猫 1周前
- 使用cython库对python代码进行动态编译达到加速效果及python第三方包的制作安装
1.测试代码:新建 fib.pyx # coding:utf-8 import matplotlib.pyplot as plt import numpy as np from sklearn.cl ...
- 类似py2exe软件真的能保护python源码吗
类似py2exe软件真的能保护python源码吗 背景 最近写了个工具用于对项目中C/C++文件的字符串常量进行自动化加密处理,用python写的,工具效果不错,所以打算在公司内部推广.为了防止代码泄 ...
- PEP 8 - Python代码样式指南
PEP 8 - Python代码样式指南 PEP: 8 标题: Python代码风格指南 作者: Guido van Rossum <python.org上的guido>,Barry Wa ...
- 【转】类似py2exe软件真的能保护python源码吗
类似py2exe软件真的能保护python源码吗 背景 最近写了个工具用于对项目中C/C++文件的字符串常量进行自动化加密处理,用python写的,工具效果不错,所以打算在公司内部推广.为了防止代码泄 ...
随机推荐
- macOS下安装openCV+Xcode配置
macOS下安装openCV+Xcode配置打开终端 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Hom ...
- 20190815-$N \Theta IP$
$NOIP$ 请选择您想测试的难度: 「困难」 「困难的地狱」 「能被神犇切掉的」 「你做不出来的」 「简单(完成前面所有后解锁)」 要难死了-- 考试过程: 首先看看三道题: 这是NOIP模拟测试? ...
- spring cloud深入学习(二)-----服务注册中心spring cloud eureka
服务治理 主要用来实现各个微服务实例的自动化注册与发现,为啥需要这玩意呢?在一开始比如A系统调用B服务,可能通过手工维护B服务的实例,并且还得采用负载均衡等方式,这些全部都得需要手工维护,等后面系统越 ...
- css不定高图文垂直居中的三种方法
html部分 <div class="box"> <img class="img" src="http://p2.so.qhmsg. ...
- 2016计蒜之道复赛A 百度地图的实时路况
百度地图的实时路况功能相当强大,能方便出行的人们避开拥堵路段.一个地区的交通便捷程度就决定了该地区的拥堵情况.假设一个地区有 nnn 个观测点,编号从 111 到 nnn.定义 d(u,v,w)d(u ...
- PHP获取真实客户端的真实IP的方法
REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP.如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP. HTTP_CLIENT_IP 是代理服务器发送的HTTP头. ...
- Handling Missing Values
1) A Simple Option: Drop Columns with Missing Values 如果这些列具有有用信息(在未丢失的位置),则在删除列时,模型将失去对此信息的访问权限. 此外, ...
- 数据挖掘案例:基于 ReliefF和K-means算法的应用
数据挖掘案例:基于 ReliefF和K-means算法的应用 数据挖掘方法的提出,让人们有能力最终认识数据的真正价值,即蕴藏在数据中的信息和知识.数据挖掘(DataMiriing),指的是从大型数据库 ...
- FreeMarker中<#include>和<#import>标签的区别
在使用freemarker作为前端页面模板的应用中,会有很多的freemarker模板页面,这些ftl会在不同的页面中重复使用,一是为了简化布局的管理,二是可以重复使用一些代码. 在freemarke ...
- PHP数据加密和解密
encrypt.php <?php /** * Passport 加密函数 * * @param string 等待加密的原字串 * @param string 私有密匙(用于解密和加密) * ...