python打包生成so文件的实现


Posted in Python onOctober 30, 2020

1.安装工具

python3 安装:cython

pip3 install cython -i http://mirrors.aliyun.com/pypi/simple/

pip国内的一些镜像  

阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

linux 安装:python-devel,gcc

查看gcc版本信息,有的话就不用安装了

gcc --version

python打包生成so文件的实现

没有自行安装对应服务器版本环境的gcc编译安装python-devel

pip3 install python-devel -i http://mirrors.aliyun.com/pypi/simple/

2. Linux下的.so文件(测试用例)

创建一个测试文件夹

mkdir so_test

so_test文件夹下创建要封装的文件test.py

import datetime 
class DataCenter(): 
  def gettime(self): 
     print(datetime.datetime.now()) 
  def write_data(self): 
    print("hello XiaoBoData!")

so_test文件夹下创建调用文件 so_test.py

from test import DataCenter 
data = DataCenter() 
data.gettime() 
data.write_data()

首先运行so_test保证代码可以运行成功,之后在做so封装

python打包生成so文件的实现

so_test文件夹下创建打包文件 setup.py

from test import DataCenter 
data = DataCenter() 
data.gettime() 
data.write_data()

最终文件夹下如下:

python打包生成so文件的实现

执行python3 setup.py build_ext

python打包生成so文件的实现

根据文件大小,编译时间不同

执行成功之后,同目录会生成一个test.c的文件和build的文件夹,生成的so文件就在build/lib.linux-aarch64-3.5/目录下,服务器的环境不同生成的so文件名也不同,生成位置都是相同的

python打包生成so文件的实现

把生成的so文件拷贝到test.py文件存放位置即可,然后删除test.py,test.c和build文件夹,执行python3 so_test试试能不能成功

python打包生成so文件的实现

测试证明没有问题,加密之后的so文件 == py文件,只不过从明文变成了密文,后缀名从py变成so,其他的都没有变,达到了代码的安全性

 3. Windows下将Python封装成pyd文件(dll)

pyd就是dll

mytest.py 和dll_test.py和上面一样

创建setupDll.py

# !/usr/bin/env python 
# -*- coding: utf-8 -*- 
from distutils.core import setup 
from Cython.Build import cythonize 
from distutils.extension import Extension 
def main(): 
# 这里为文件名 可以增加多个Extension(' ', [' ']) 
  extensions = [Extension('mytest', ['mytest.py'])] 
  setup(ext_modules=cythonize(extensions))
if __name__ == '__main__': 
  main()

在pycharm的terminal下输入Python setupDll build_ext,得到pyd文件

python打包生成so文件的实现

在build文件夹下得到.pyd文件调用方式不变

# !/usr/bin/env python
# -*- coding: utf-8 -*-
#如果不想改变pyd路径,则需要在dll_test.py中加入:
import sys
sys.path.append('./build/lib.win-amd64-3.7/')
from mytest import DataCenter
def main():
  data = DataCenter()
  data.gettime()
  data.write_data()

if __name__ == '__main__':
  main()

运行得到结果

python打包生成so文件的实现

到此这篇关于python打包生成so文件的实现的文章就介绍到这了,更多相关python打包生成so文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python程序设计入门(2)变量类型简介
Jun 16 Python
Python如何获取系统iops示例代码
Sep 06 Python
Python绘制3D图形
May 03 Python
python事件驱动event实现详解
Nov 21 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
Python求离散序列导数的示例
Jul 10 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
Django集成MongoDB实现过程解析
Dec 01 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 Python
pytorch 移动端部署之helloworld的使用
Oct 30 #Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 #Python
Python模拟登录和登录跳转的参考示例
Oct 30 #Python
python中watchdog文件监控与检测上传功能
Oct 30 #Python
GitHub上值得推荐的8个python 项目
Oct 30 #Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 #Python
用python写PDF转换器的实现
Oct 29 #Python
You might like
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
javascript实现留言板功能
2020/02/08 Javascript
windows系统下Python环境搭建教程
2017/03/28 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
django的settings中设置中文支持的实现
2019/04/28 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
三八妇女节活动主持词
2014/03/17 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
市场总监岗位职责
2015/02/11 职场文书
开会通知短信大全
2015/04/20 职场文书
七一晚会主持词
2015/06/29 职场文书
思想品德课教学反思
2016/02/24 职场文书
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL