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中使用第三方库xlrd来读取Excel示例
Apr 05 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
Django框架首页和登录页分离操作示例
May 28 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
python爬取2021猫眼票房字体加密实例
Feb 19 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
Terran剧情介绍
2020/03/14 星际争霸
重置版游戏视频
2020/04/09 魔兽争霸
php5.4传引用时报错问题分析
2016/01/22 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
JS 时间显示效果代码
2009/08/23 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
python在windows下实现备份程序实例
2014/07/04 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
表彰大会主持词
2014/03/26 职场文书
诚信承诺书范文
2014/03/27 职场文书
给老婆的保证书范文
2014/04/28 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers