Python扩展C/C++库的方法(C转换为Python)

 更新时间:2020年10月15日 10:04:48   作者:Boys_Wu  
这篇文章主要介绍了Python扩展C/C++库的方法(C转换为Python),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

参考网址:https://www.shanlily.cn/archives/330

一、简介

Python是个非常流行的解释型脚本语言。而C是一个非常流行的编译语言。由于其编译的性质,导致C一般比Python要快,但是它是更底层的。相对的,Python编程更加快速和简单。故而将C库作为Python库的扩展极为必要,使得Python既融合了自身的优点,又融合了C语言的优点,正是因为这些性质使得Python越来越流行。

二、通过swing扩展C库

(1) 安装swig

命令: sudo apt-get install swig

(2) 准备好要转换的C源文件和C头文件, 可参考下面的代码:
新建头文件:Conver_Testswig.h,并添加如下内容:

dvoid Table99(int n);
void Fabocci(void);
int Max_value(int value1, int value2);

新建.c文件:Conver_Testswig.c,并添加如下内容:

#include <stdio.h>
#include "Conver_Testswig.h"

// 打印乘法表
void Table99(int n)
{
 int i, j;
 for(i = 1; i <= n; i++)
 {
  for(j = 1; j <= n; j++)
  {
   printf("%d*%d=%-4d", i, j, i*j);
  }
  printf("\n");
 }
}

// 打印斐波那契数列的前20个
void Fabocci(void)
{
 long int f1, f2;
 f1 = f2 = 1;
 int i;
 for(i = 1; i <= 20; i++)
 {
  printf("%12ld %12ld", f1, f2);
  if(i % 2 == 0)
   printf("\n");
  f1 = f1 + f2;
  f2 = f1 + f2;
 }
}

// 返回两个数值中的最大那个。
int Max_value(int value1, int value2)
{
 if(value1 > value2)
 {
  return value1;
 }

 return value2;
}

(3) 创建一个 .i 文件来配置swig。,文件为:Conver_Testswig.i ,并添加如下内容:

%module Conver_Testswig

%{
#define SWIG_FILE_WITH_INIT
#include "Conver_Testswig.h"
%}

void Table99(int n);
void Fabocci(void);
int Max_value(int value1, int value2);

简单介绍:

%module Conver_Testswig 用于配置swig后产生的文件名称
#define SWIG_FILE_WITH_INIT 规定这个C文件将会编译成Python模块
#include "Conver_Testswig.h" 包含头文件

(4) 配置swig。在含有Conver_Testswig.i文件的目录下执行如下命令:

swig -python Conver_Testswig.i

执行该命令会生成一个Conver_Testswig_wrap.c和Conver_Testswig.py文件则代表你配置成功了.

(5) 通过setup库进行编译。新建一个 setup.py 文件并添加内容:

① 编写setup.py文件, 请参考以下代码:

from distutils.core import setup, Extension
MOD = '_Conver_Testswig'

example_module = Extension(MOD, sources=['Conver_Testswig_wrap.c', 'Conver_Testswig.c'], )

setup(name=MOD,ext_modules = [example_module],)

注意: 请务必注意生成目标文件名称需要加”_”

② 通过setup.py文件进行编译

命令: python setup.py build

编译完成后, 可在/build/…/…找到相应库文件,如果是在linux系统下,一般生成的文件中含有.so库文件,将该文件拷贝到pythonsite-packages包管理目录下即可使用或者在build编译后再使用install命令将该.so文件生成在site-packages包管理目录下。此处我的python环境是新建的一个虚拟环境。

命令:python setup.py install

在这里插入图片描述
在这里插入图片描述

(6) 开始运行测试吧,在pycharm中测试。

打印乘法表:

在这里插入图片描述

打印斐波那斐契数列的前20个:

在这里插入图片描述

总结

到此这篇关于Python扩展C/C++库的方法(C转换为Python)的文章就介绍到这了,更多相关Python扩展C/C++库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现简单职工信息管理系统

    C++实现简单职工信息管理系统

    本文给大家分享的是使用C++实现简单的职工信息管理系统的代码,本系统采用了面向对象的程序设计方法,所有的方法均以类为基础,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • C++ 基础教程之虚函数实例代码详解

    C++ 基础教程之虚函数实例代码详解

    虚函数在 c++ 的继承体系中是一个非常重要概念,让我们可以在子类中复写父类的方法。这篇文章主要介绍了C++ 基础教程之虚函数实例代码的相关资料,需要的朋友可以参考下
    2020-02-02
  • C++ ffmpeg实现将视频帧转换成jpg或png等图片

    C++ ffmpeg实现将视频帧转换成jpg或png等图片

    有时播放实时流的时候有截图的需求,需要将解码出来的图片保存本地或上传服务器,这时就需要将avframe中的数据编码成png、jpg等格式的图片,我们使用ffmpeg的相关编码器就可以实现功能,下面就来讲讲具体实现方法吧
    2023-03-03
  • C++中LibCurl库的使用教程分享

    C++中LibCurl库的使用教程分享

    LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,这篇文章主要为大家介绍了如何在C++中使用LibCurl库,需要的可以参考下
    2023-08-08
  • C语言实现静态存储通讯录的示例代码

    C语言实现静态存储通讯录的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言实现一个静态存储的通讯录,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-09-09
  • 详解C语言正确使用extern关键字

    详解C语言正确使用extern关键字

    这篇文章主要介绍了C语言正确使用extern关键字,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Qt6.0+vs2019环境配置的实现教程

    Qt6.0+vs2019环境配置的实现教程

    这篇文章主要介绍了Qt6.0+vs2019环境配置的实现教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Qt实现右击菜单项

    Qt实现右击菜单项

    这篇文章主要为大家详细介绍了Qt实现右击菜单项,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++中访问权限的示例详解

    C++中访问权限的示例详解

    C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限(也称为可见性),下面这篇文章主要给大家介绍了关于C++中访问权限的相关资料,需要的朋友可以参考下
    2021-07-07
  • 详解C++编程中的单目运算符重载与双目运算符重载

    详解C++编程中的单目运算符重载与双目运算符重载

    这篇文章主要介绍了详解C++编程中的单目运算符重载与双目运算符重载,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09

最新评论