您好,登錄后才能下訂單哦!
參考網址: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
庫文件,將該文件拷貝到python
的site-packages
包管理目錄下即可使用或者在build
編譯后再使用install
命令將該.so
文件生成在site-packages
包管理目錄下。此處我的python環境是新建的一個虛擬環境。
命令:python setup.py install
(6) 開始運行測試吧,在pycharm中測試。
打印乘法表:
打印斐波那斐契數列的前20個:
總結
到此這篇關于Python擴展C/C++庫的方法(C轉換為Python)的文章就介紹到這了,更多相關Python擴展C/C++庫內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。