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 Queue模块详细介绍及实例
Dec 27 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
对pandas中apply函数的用法详解
Apr 10 Python
python交换两个变量的值方法
Jan 12 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python安装scipy的方法步骤
Jun 26 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
利用python计算时间差(返回天数)
Sep 07 Python
python函数map()和partial()的知识点总结
May 26 Python
python文件编写好后如何实践
Jul 07 Python
如何利用Python动态模拟太阳系运转
Sep 04 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中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
Python如何生成xml文件
2020/06/04 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
详解px单位html5响应式方案
2018/03/08 HTML / CSS
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
个人自我评价分享
2013/12/20 职场文书
简历自我评价怎么写呢?
2014/01/06 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
2015年教师节主持词
2015/07/03 职场文书
会计主管竞聘书
2015/09/15 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
React配置子路由的实现
2021/06/03 Javascript
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL