当前位置: 首页 > news >正文

使用 Cython 编译将.py文件加密成.so文件

文章目录

  • 1. .so文件的核心意义和优势
  • 2. 使用 Cython 编译,将.py文件加密成.so文件

最近在学习在服务器上如何部署Python模型,不学不知道,一学吓一跳,要学好多啊,最近看到什么就记录一下什么吧。

1. .so文件的核心意义和优势

在服务器上部署时会有Python的将 .py 文件编译为 .so(Linux)或 .pyd(Windows)文件,主要有以下核心意义和优势:
1. 代码保护与加密

  • 防止源码泄露
    .so 是二进制文件,无法直接阅读,保护核心算法或商业逻辑(尤其对闭源项目至关重要)。
  • 规避反编
    译风险 相比 .pyc(Python 字节码),.so 更难逆向工程,安全性更高。
    2. 性能优化
  • 加速执行
    Cython 将 Python 代码编译为 C 扩展,计算密集型任务(如数值计算、循环)性能可提升 10-100 倍。
  • 减少解释器开销
    直接调用编译后的机器码,跳过 Python 解释器的动态类型检查。
    3. 依赖简化
  • 隐藏第三方库依赖
    编译时可将部分依赖静态链接到 .so 中,减少服务器环境配置的复杂性。
  • 避免环境冲突
    二进制文件对 Python 版本和操作系统有明确要求,强制环境一致性。
    4. 部署便利性
  • 无源码部署
    只需分发 .so 文件,无需暴露源代码,适合交付客户或云服务器部署。
  • 跨平台兼容性
    通过交叉编译生成目标平台的 .so,适配不同服务器环境(需匹配 Python 版本和 OS)。
    5. 资源控制
  • 内存管理优化
    Cython 支持手动管理内存(如 cdef 定义 C 类型变量),减少 Python 垃圾回收压力。
  • 系统调用集成
    可直接调用 C/C++ 库,实现底层操作(如高性能 IO、硬件加速)。

2. 使用 Cython 编译,将.py文件加密成.so文件

直接演示在jupyter上如何使用 Cython 编译,将.py文件加密成.so文件
安装cython包

!pip install cython

安装成功会显示入下图

由于我在jupyter上,Python文件后缀为.ipynb,需要先转换成.py文件,再加密成.so文件

# 1 将.ipynb 文件转换保存为 .py文件
import nbformat
from nbconvert import PythonExporter# 2.读取 .ipynb 文件 
with open("entropy_weight.ipynb", "r", encoding="utf-8") as f:notebook = nbformat.read(f, as_version=4)# 3.转换为 .py
exporter = PythonExporter()
python_code, _ = exporter.from_notebook_node(notebook)# 4.保存为 .py 文件
with open(r"C:\Users\xxx\Desktop\entropy_weight.py", "w", encoding="utf-8") as f:f.write(python_code)
%%writefile setup.py
## 必须要在第一行
from distutils.core import setup 
from Cython.Build import cythonize
# 5 创建 setup.py 编译脚本
setup(ext_modules=cythonize(r"C:\Users\xxx\Desktop\entropy_weight.py"))

在这里插入图片描述

# 6. 编译命令
!python setup.py build_ext --inplace

✅ 你的编译已成功,生成了Windows平台的 .pyd 文件,而非 .so(entropy_weight.cp311-win_amd64.pyd)
在这里插入图片描述

✅ 使用 import entropy_weight 可直接调用

调用.so文件

import entropy_weight  #导入原始的entropy_weight.py文件
import pandas as pddt= pd.read_excel(r"D:\data.xlsx",sheet_name='副本')
dt = dt.iloc[:,3:6].dropna()
dt.columns = ['字段1','字段2','字段3']# 7. 调用 entropy_weight里的函数cal_weight
w,S = entropy_weight.cal_weight(dt)  
w.index = dt.columns
w.columns = ['weight']
S.columns = ['score']
print('指标权重\n',w,'\n')
print('样本综合得分\n',S)  
print('\n计算完成!')

在这里插入图片描述

相关文章:

  • Apptrace:APP安全加速解决方案
  • 企业知识库问答系统避坑指南:检索优化与生成一致性解决方案
  • 【Redis】hash
  • Haproxy
  • 不用 apt 的解决方案(从源码手动安装 PortAudio)
  • MiniMax V-Triune让强化学习(RL)既擅长推理也精通视觉感知
  • MyBatisPlus--快速入门
  • 【仿muduo库实现并发服务器】实现时间轮定时器
  • 接口自动化测试用例的编写方法
  • [paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型
  • Kotlin JVM 注解详解
  • ElasticSearch迁移至openGauss
  • Spring Boot 整合 Spring Security
  • 【软件】在 macOS 上安装 MySQL
  • Vue3使用vue-web-screen-shot实现截图功能
  • 第六十一节:深度学习-使用 OpenCV DNN 模块
  • 短剧系统开发文案:打造沉浸式互动娱乐新体验
  • Vue Element tree lable组合展示
  • Android JNI开发
  • React基础教程(13):路由的使用
  • 颍州网站建设/网站推广网络推广
  • 织梦网站如何上传/优化的含义
  • 四川省建设厅招标网站/百度如何优化
  • 天津市工程信息建设网/seo 适合哪些行业
  • 广西茶叶网站建设/企拓客软件多少钱
  • 做周边的网站/百度推广app下载官方