Python擴展C/C++庫的方法(C轉(zhuǎn)換為Python)
參考網(wǎng)址:https://www.shanlily.cn/archives/330
一、簡介
Python是個非常流行的解釋型腳本語言。而C是一個非常流行的編譯語言。由于其編譯的性質(zhì),導(dǎo)致C一般比Python要快,但是它是更底層的。相對的,Python編程更加快速和簡單。故而將C庫作為Python庫的擴展極為必要,使得Python既融合了自身的優(yōu)點,又融合了C語言的優(yōu)點,正是因為這些性質(zhì)使得Python越來越流行。
二、通過swing擴展C庫
(1) 安裝swig
命令: sudo apt-get install swig
(2) 準(zhǔn)備好要轉(zhuǎn)換的C源文件和C頭文件, 可參考下面的代碼:
新建頭文件:Conver_Testswig.h,并添加如下內(nèi)容:
dvoid Table99(int n); void Fabocci(void); int Max_value(int value1, int value2);
新建.c文件:Conver_Testswig.c,并添加如下內(nèi)容:
#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");
}
}
// 打印斐波那契數(shù)列的前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;
}
}
// 返回兩個數(shù)值中的最大那個。
int Max_value(int value1, int value2)
{
if(value1 > value2)
{
return value1;
}
return value2;
}
(3) 創(chuàng)建一個 .i 文件來配置swig。,文件為:Conver_Testswig.i ,并添加如下內(nè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后產(chǎn)生的文件名稱 #define SWIG_FILE_WITH_INIT 規(guī)定這個C文件將會編譯成Python模塊 #include "Conver_Testswig.h" 包含頭文件
(4) 配置swig。在含有Conver_Testswig.i文件的目錄下執(zhí)行如下命令:
swig -python Conver_Testswig.i
執(zhí)行該命令會生成一個Conver_Testswig_wrap.c和Conver_Testswig.py文件則代表你配置成功了.
(5) 通過setup庫進行編譯。新建一個 setup.py 文件并添加內(nèi)容:
① 編寫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],)
注意: 請務(wù)必注意生成目標(biāo)文件名稱需要加”_”
② 通過setup.py文件進行編譯
命令: python setup.py build
編譯完成后, 可在/build/…/…找到相應(yīng)庫文件,如果是在linux系統(tǒng)下,一般生成的文件中含有.so庫文件,將該文件拷貝到python的site-packages包管理目錄下即可使用或者在build編譯后再使用install命令將該.so文件生成在site-packages包管理目錄下。此處我的python環(huán)境是新建的一個虛擬環(huán)境。
命令:python setup.py install


(6) 開始運行測試吧,在pycharm中測試。
打印乘法表:

打印斐波那斐契數(shù)列的前20個:

總結(jié)
到此這篇關(guān)于Python擴展C/C++庫的方法(C轉(zhuǎn)換為Python)的文章就介紹到這了,更多相關(guān)Python擴展C/C++庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入二叉樹兩個結(jié)點的最低共同父結(jié)點的詳解
本篇文章是對二叉樹兩個結(jié)點的最低共同父結(jié)點進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
深入剖析C語言中qsort函數(shù)的實現(xiàn)原理
這篇文章主要介紹了C語言中qsort函數(shù)的實現(xiàn)原理,本文將從回調(diào)函數(shù),qsort函數(shù)的應(yīng)用,qsort函數(shù)的實現(xiàn)原理三個方面進行講解,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-03-03
C++?使用getline()從文件中讀取一行字符串方法示例
這篇文章主要介紹了C++?使用getline()從文件中讀取一行字符串方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Qt實現(xiàn)UDP多線程數(shù)據(jù)處理及發(fā)送的簡單實例
本文主要介紹了Qt實現(xiàn)UDP多線程數(shù)據(jù)處理及發(fā)送的簡單實例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
C語言sizeof和strlen的指針和數(shù)組面試題詳解
strlen是函數(shù),字符串長度,不包括停止符。而sizeof則是內(nèi)存塊的大小,包括停止符。數(shù)組是一種數(shù)據(jù)類型,數(shù)據(jù)類型的本質(zhì)就是固定大小,內(nèi)存塊的別名??梢杂胹izeof()一般都是數(shù)據(jù)類型2022-04-04

