将Python脚本编译为so文件的方法,并实现调用

2023-11-18

本文以Linux系统(Ubuntu)为例,讲解如何将自己的Python程序(.py文件)加密为.so文件。

1、安装必要的工具

首先,我们需要在Ubuntu系统中安装一些准备工具,包括python3-dev gcc,Cython,其中Cython为Python的第三方模块。安装的命令如下:
安装gcc

sudo apt install python3-dev gcc

安装Cython

pip3 install cython

2、准备需要加密的脚本和测试代码

我们新建pythontest文件夹,用于测试我们的代码,文件夹的内容包括:test.py,setup.py ,test_main.py
其中,test.py为我们需要加密的Python程序,setup.py为加密的脚本。
test.py的代码如下:

 def add(a,b):
        return a+b

加密脚本setup.py的代码如下:

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(["test.py"]))

测试代码test_main.py的代码如下:

from test import add
a = add(4,21)
print(a)

3、对程序 进行加密

切换至pythontest文件夹,运行setup.py对mytest.py程序加密,命令如下:

python setup.py build_ext --inplace

运行之后,生成 test.cpython-36m-x86_64-linux-gnu.so文件,可以直接调用,实现对我们源代码的保护

4、实现对so文件的调用

使用Python对SO调用,保存的文件为test_so.py,其代码如下:

from ctypes import cdll

cur = cdll.LoadLibrary('./test.cpython-36m-x86_64-linux-gnu.so')
print(cur)
aa = cur.add()
print(aa(3,6))

执行 python test_so.py ,运行结果 为 9

以上4步实现Python源码编译打包为SO文件,并实现了SO文件的调用,实现了对我们源码的保护。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将Python脚本编译为so文件的方法,并实现调用 的相关文章

随机推荐

  • html爱心表白代码(最全)

    目录 写在前面 十四个表白效果及使用说明 最后几个是最新的效果 购买本文前12个代码 怎么在页面添加文字和背景音乐 如何得到自己喜欢的音乐链接地址 怎么修改背景颜色或字体颜色 其他表白代码 跨年表白代码 最新表白代码 绝对好看 常见问题说明
  • MATLAB小技巧(33)arima时间序列

    MATLAB小技巧 33 arima时间序列 前言 一 MATLAB仿真 二 仿真结果 三 小结 前言 MATLAB进行图像处理相关的学习是非常友好的 可以从零开始 对基础的图像处理都已经有了封装好的许多可直接调用的函数 这个系列文章的话主
  • Ajax回调函数中再次使用Ajax访问controller,通过controller return来重定向跳转页面失败

    Ajax访问controller 通过controller return来重定向跳转页面失败 Ajax回调函数中再次使用Ajax访问controller 通过controller return来重定向跳转页面失败 ajax type pos
  • python自定义输出颜色_Python logging自定义字段输出及设置日志打印颜色

    importloggingimportosfrom logging importhandlersclassJsonFilter logging Filter 此处定义字段的默认值 如果打印信息时不设置对应字段 则为默认值 服务服务名或者服务
  • 武侠乂怎么修改服务器,武侠乂操作技巧 武侠乂手游怎么操作

    武侠乂怎么操作 武侠乂是一个主要以生存竞技玩法为主游戏 在有限的时间和安全空间内 玩家需要边生存边搜索边战斗 最终击败所有其他玩家来获得胜利 今天小辰给大家介绍一下武侠乂的操作技巧 一起来看看吧 武侠乂怎么操作 如上图 手游不像端游 整体简
  • nvidia驱动安装·

    nvidia驱动安装 禁用nouveau驱动 sudo apt get remove purge nvidia sudo gedit etc modprobe d blacklist conf 在文本最后添加 禁用nouveau第三方驱动
  • 超详细的Nginx负载均衡+高可用配置(亲测附图)

    负载均衡 目的 提升吞吐率 提升请求性能 提 高容灾 Nginx 实现负载均衡用到 proxy pass 代 模块核心配置 将客户端请求代 转发至一组 upstream 虚拟服务池 负载均衡和反向代理的区别是 反向代理由代理服务器指定特定的
  • 电商零售行业1--用户消费行为分析

    用户消费行为分析 项目背景 数据处理 导入数据 数据探索可视化 数据预处理 用户整体消费分析 用户个体消费分析 用户消费金额 消费次数 描述性统计 用户消费分布图 用户累计消费金额占比分析 贡献度 用户消费行为 首购时间 最后一次购买时间
  • 解决php7.2后报错Warning: Use of undefined constant PRE - assumed问题

    解决此种问题其实也不是很难 只是报了 Warning警告 我们只需要关闭 PHP错误提示 就行了 具体步骤如下 1 打开 php ini 2 设置 error reporting E ALL E DEPRECATED E STRICT 3
  • 使用fiddle抓包使用教程

    Fiddler是什么 Fiddler是一个http调试代理 它能 够记录所有的你电脑和互联网之间的http通讯 Fiddler 可以也可以让你检查所有的http通讯 设置断点 以及Fiddle 所有的 进出 的数据 指cookie html
  • 如何在css文件中使用本地ttf/woff/woff2字体?

    如何在css文件中使用本地ttf woff woff2字体 1 首先下载ttf woff woff2字体文件 免费的字体文件可以上阿里矢量图库进行下载 不过数量很少 2 在css文件中配置相应代码 font face font family
  • 关于IBM MQ6.0与MQ8.0的通信问题

    国庆之后 负责的一个项目突然出现了问题 描述问题 在网络 业务 业务量都没有增长的情况下 MQ8的批量发送通道突然就挂掉了 变成retrying状态了 消息全都堵在传输队列里了 死信队列无消息 实时通道正常 排除网络原因导致的通道问题 采取
  • Cannot declare class app\home\controller\Cases because the name is already in use

    Cannot declare class app home controller Cases because the name is already in use 命名空间冲突了 use 模型类的时候使用as别名 同一个页面上 命名空间不同
  • MyBatis-Plus主键生成策略

    主键生成策略 MyBatis Plus默认实现5种主键生成策略 分别是 AUTO 配合数据库设置自增主键 可以实现主键的自动增长 类型为nmber INPUT 由用户输入 NONE 不设置 等同于INPUT ASSIGN ID 只有当用户未
  • 常见git报错问题

    1 windows使用git时出现 warning LF will be replaced by CRLF windows中的换行符为 CRLF 而在linux下的换行符为LF 所以在执行add 时出现提示 解决办法 rm rf git 删
  • FreeRTOS实时操作系统(三)任务挂起与恢复

    系列文章 FreeRTOS实时操作系统 一 RTOS的基本概念 FreeRTOS实时操作系统 二 任务创建与任务删除 HAL库 FreeRTOS实时操作系统 三 任务挂起与恢复 FreeRTOS实时操作系统 四 中断任务管理 FreeRTO
  • 将springboot的项目打包成jar部署

    一 在项目的配置文件pom xml下导入
  • 数学建模十大算法01-蒙特卡洛算法(Monte Carlo)

    文章目录 一 生成随机数 1 1 rand 1 2 unifrnd 1 3 联系与区别 二 引入 2 1 引例 2 2 基本思想 2 3 优缺点 三 实例 3 1 蒙特卡洛求解积分 3 2 简单的实例 3 3 书店买书 0 1规划问题 3
  • Java IO流 缓冲流-BufferedInputStream、BufferedOutputStream

    首先抛出一个问题 有了InputStream为什么还要有BufferedInputStream BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterO
  • 将Python脚本编译为so文件的方法,并实现调用

    本文以Linux系统 Ubuntu 为例 讲解如何将自己的Python程序 py文件 加密为 so文件 1 安装必要的工具 首先 我们需要在Ubuntu系统中安装一些准备工具 包括python3 dev gcc Cython 其中Cytho