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 相关文章推荐
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
对Python+opencv将图片生成视频的实例详解
Jan 08 Python
python绘制随机网络图形示例
Nov 21 Python
Python 动态变量名定义与调用方法
Feb 09 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
关于python的缩进规则的知识点详解
Jun 22 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
python自动化调用百度api解决验证码
Apr 13 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实现删除指定目录下相关文件的方法
2014/10/20 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
浅谈PHP的反射API
2017/02/26 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
Python获取远程文件大小的函数代码分享
2014/05/13 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
深度定制Python的Flask框架开发环境的一些技巧总结
2016/07/12 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
基于Python实现粒子滤波效果
2020/12/01 Python
python中最小二乘法详细讲解
2021/02/19 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
英国综合网上购物商城:The Hut
2018/07/03 全球购物
十月份红领巾广播稿
2014/01/22 职场文书
校园广播稿500字
2014/02/04 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
软件售后服务承诺书
2014/05/21 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android