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使用BeautifulSoup分析网页信息的方法
Apr 04 Python
Python编写一个闹钟功能
Jul 11 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
python装饰器的特性原理详解
Dec 25 Python
django配置app中的静态文件步骤
Mar 27 Python
简单了解如何封装自己的Python包
Jul 08 Python
Python 如何操作 SQLite 数据库
Aug 17 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
Python基础之hashlib模块详解
May 06 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扩展图文教程
2008/12/12 PHP
写出高质量的PHP程序
2012/02/04 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
jQuery同步提交示例代码
2015/12/12 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
微信小程序上线发布流程图文详解
2019/05/06 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
Python求解平方根的方法
2015/03/11 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
python爬虫增加访问量的方法
2019/08/22 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python实现手势识别的示例(入门)
2020/04/15 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
高级销售求职信
2014/02/21 职场文书
承诺书的格式范文
2014/03/28 职场文书
公司门卫工作职责
2014/06/28 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
新生儿未入户证明
2015/06/23 职场文书
《观潮》教学反思
2016/02/17 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS