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实现挑选出来100以内的质数
Mar 24 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
django迁移数据库错误问题解决
Jul 29 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
Python使用Excel将数据写入多个sheet
May 16 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
php通过session防url攻击方法
2014/12/10 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
JavaScript 继承详解(二)
2009/07/13 Javascript
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
jquery 双色表格实现代码
2009/12/08 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
python简单线程和协程学习心得(分享)
2017/06/14 Python
python数据爬下来保存的位置
2020/02/17 Python
python关于倒排列的知识点总结
2020/10/13 Python
美国家具网站:Cymax
2016/09/17 全球购物
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
应用英语专业自荐信
2014/01/26 职场文书
连带责任保证书
2014/04/29 职场文书
校园元旦活动总结
2014/07/09 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书