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字典序问题实例
Sep 26 Python
在Django的session中使用User对象的方法
Jul 23 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
Python切片操作实例分析
Mar 16 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
关于python 跨域处理方式详解
Mar 28 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 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中批量修改文件后缀名的函数代码
2011/10/23 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
Js四则运算函数代码
2012/07/21 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
javascript编程异常处理实例小结
2015/11/30 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
超简单使用Python换脸实例
2019/03/27 Python
python实现大文本文件分割
2019/07/22 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
python进阶之自定义可迭代的类
2019/08/20 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
促销活动总结
2014/04/28 职场文书
请病假条范文
2015/08/17 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle