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中使用MELIAE分析程序内存占用实例
Feb 18 Python
python实现定时同步本机与北京时间的方法
Mar 24 Python
Python出现segfault错误解决方法
Apr 16 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
详解python之简单主机批量管理工具
Jan 27 Python
Python中static相关知识小结
Jan 02 Python
python使用matplotlib画饼状图
Sep 25 Python
python实现逐个读取txt字符并修改
Dec 24 Python
详解python使用turtle库来画一朵花
Mar 21 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
python 3.6.7实现端口扫描器
Sep 04 Python
通过python3实现投票功能代码实例
Sep 26 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 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
js 与或运算符 || && 妙用
2009/12/09 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
小程序实现多选框功能
2018/10/30 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
斯福泰克软件测试面试题
2015/02/16 面试题
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
师范生见习报告
2014/10/31 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android