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命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
python语音识别实践之百度语音API
Aug 30 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
python 一维二维插值实例
Apr 22 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
python如何实现word批量转HTML
Sep 30 Python
详解Python魔法方法之描述符类
May 26 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
PHP图片上传类带图片显示
2006/11/25 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
Express.JS使用详解
2014/07/17 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
英文导游欢迎词
2014/01/11 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
优秀党员申报材料
2014/12/18 职场文书
好媳妇事迹材料
2014/12/24 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
教你nginx跳转配置的四种方式
2022/07/07 Servers