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中Collection的使用小技巧
Aug 18 Python
python实现的文件同步服务器实例
Jun 02 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
python url 参数修改方法
Dec 26 Python
python导入模块交叉引用的方法
Jan 19 Python
python解析xml简单示例
Jun 21 Python
python画双y轴图像的示例代码
Jul 07 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
python爬虫使用scrapy注意事项
Nov 23 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 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
收音机的保养
2021/03/01 无线电
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
php合并js请求的例子
2013/11/01 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
PHP的拦截器实例分析
2014/11/03 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
jquery JSON的解析方式
2009/07/25 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
Python输出9*9乘法表的方法
2015/05/25 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
公司介绍信范文
2015/01/31 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python
关于python中模块和重载的问题
2021/11/02 Python