pyobfuscate 代码混淆 def my_fuction_to_test ( self , start_date , end_date ) : iiiii11iII1 = self . get_something ( start_date , end_date ) O0o = [ ] for oO0 in iiiii11iII1 : if oO0 [ "isOpen" ] == 1 : IIIi1i1I = { } OOoOoo00oo = dt . strptime ( oO0 [ 'calendarDate' ] , '%Y-%m-%d' ) IIIi1i1I [ 'day' ] = OOoOoo00oo . strftime ( '%Y%m%d' ) IIIi1i1I [ 'week' ] = oO0 [ 'isWeekEnd' ] IIIi1i1I [ 'month' ] = oO0 [ 'isMonthEnd' ] IIIi1i1I [ 'weekday' ] = OOoOoo00oo . weekday ( ) O0o . append ( IIIi1i1I ) iiI11 = pd . DataFrame ( O0o ) return iiI11
Cython
的主要目的是带来性能的提升,但是基于它的原理:将 .py
/.pyx
编译为 .c
文件,再将 .c
文件编译为 .so
(Unix) 或 .pyd
(Windows),其带来的另一个好处就是难以破解。
不足:
步骤兼容性稍差,对于不同版本的操作系统,可能需要重新编译
虽然支持大多数 Python 代码,但如果一旦发现部分代码不支持,完善成本较高。
1、安装cython依赖
pip install Cython==0.29.22
2、配置setup.py文件
APP_ID = 'xxx' # 需要编译的目录 dir_paths = ['apps/configs', 'account', 'common', 'component', 'component/utils', 'component/drf', 'component/drf/mixins', 'config' ] files = [APP_ID + '/' + i + '/*.py' for i in dir_paths] # 参数包含build_ext 说明是编译 if 'build_ext' in sys.argv: # 编译生成so文件 setup(ext_modules = cythonize(files, exclude=['__init__.py'])) else: # 删除py和.c 文件 for item in dir_paths: for dirpath, foldernames, filenames in os.walk(item): for file in filenames: if dirpath == item + '/migrations': break if (file.endswith('.py') or file.endswith('.c') or file.endswith('.pyc')): os.remove(dirpath + '/' + file)
3、执行
python setup.py build_ext --inplace
python setup.py
find xx/hn_docs_center -name "__pycache__" |xargs rm -rf
省略