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爬虫之抓取糗事百科代码分享
Nov 06 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
Python 实现选择排序的算法步骤
Apr 22 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
在python 中实现运行多条shell命令
Jan 07 Python
python中嵌套函数的实操步骤
Feb 27 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
Python @property装饰器原理解析
Jan 22 Python
Django+Uwsgi+Nginx如何实现生产环境部署
Jul 31 Python
详细介绍python操作RabbitMq
Apr 12 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/06/09 PHP
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python删除某个目录文件夹的方法
2020/05/26 Python
python如何查看网页代码
2020/06/07 Python
python如何更新包
2020/06/11 Python
Python 忽略文件名编码的方法
2020/08/01 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
Python try except else使用详解
2021/01/12 Python
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
后勤主管岗位职责
2014/03/01 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
起诉状范本
2015/05/20 职场文书
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技