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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
浅析Python中的join()方法的使用
May 19 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
python列表的增删改查实例代码
Jan 30 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
分享一个python的aes加密代码
Dec 22 Python
vue.js刷新当前页面的实例讲解
Dec 29 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
javascript 写类方式之三
2009/07/05 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python中的格式化输出用法总结
2016/07/28 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
师范学院毕业生求职信范文
2013/12/26 职场文书
高一数学教学反思
2014/02/07 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
学校对教师的评语
2014/04/28 职场文书
先进基层党组织材料
2014/12/25 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
Python预测分词的实现
2021/06/18 Python
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL