Python项目加密

Python项目加密

交付项目或者产研合作时往往需要保密代码,于是编写了一个加密脚本。

方案是使用Cython将.py文件编译.so文件,内容加密且较难破解。

示例代码setup.py如下,Conda环境配置(编译环境与运行环境python版本需相同)。

使用步骤:

1、安装模块Cython

命令:pip install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple

2、编写setup.py文件,

参考目录下的setup.py文件,仅需要修改文件中项目文件夹与目标文件夹地址,并且指定主文件(so代码库入口文件,py格式)。

setup.py文件说明:

功能:

  • 修改部分源码后,二次生成时修改文件夹名;
  • 读取指定目录下的python文件(包含子目录下的python文件);
  • 生成so文件到setup.py指定的source_path;
  • 创建so_path,并把当前的so文件复制到so_path下;
  • 对生成的so文件进行重新命名去掉”.cpython-39-x86_64-linux-gnu”关键字,防止泄露服务器信息;
  • 删除python源码目录下的.c与.so文件,删除BASE_PATH下生成的build文件夹;
  • 复制原文件夹下所有非py文件到so_path(例如pkl、xlsx等);
  • 复制main_py_origin到so_path;
  • 重命名source_path为source_path+’_origin’,重命名so_path与source_path同名。

注意:

1)生成前source_path必须为原始命名,例如本示例中的”/temp_real_time”,否则生成so运行会找不到相应库;

2)setup.py最终会将so_path重命名为BASE_DIR+”/temp_real_time”(即source_path),因为代码执行且各文件相互调用时以source_path为准(因为setup.py文件在temp_real_time项目代码之外,temp_real_time项目中的主文件环境变量,等同于BASE_DIR+”/temp_real_time”);

3)首次生成后source_path会变为source_path+’_origin’,此时无需修改文件夹明,setup.py会自动识别并修改。

3、生成命令

注意:

1)运行源码与运行so库的python版本要一致;

2)在windows上只能生成.pyd文件,无法生成.so文件;

3)源码中有错误会生成失败。

发表评论

邮箱地址不会被公开。 必填项已用*标注