Python3e kendi yazdığım C modülunu import etmek

Arkadaslar Python3 nasil kendi yazdigim C programini import ede bilirim?

Kitabin modüller kisminda deginilmisti. Ama C modülleri de ayni yolla midir bilemem…

Dll veya pyd formatına getirilmesi gerekiyormuş. İstihzada c# için yazdığımda bu cevabı almıştım.

Kendi yazdigim pyhon modulunu import etmeyi biliyorum benim amacim python icine C ile yazidigm kodu import etmek bunu basara bilseyim cok guzel olurdu C bilgisayara daha yakin bir dil boyle iki dili birlesdirmek olursa cok daha guclu programlar yazmak olurdu

Sys modülü c ile yazılmış(Yavaş olmasından korktukları için) şu an hiçbir değişiklik yapmadan çalışıyor. Ama bunu yorumlayıcıyı yazarken sağlamış olabilirler. Yine de siz yazdığınız modülü aynı dizine (Galiba libs klasöründeydi.) yerleştirip direk içeri aktarmayı deneyin.

Cpython işinizi gorebilir?

Internetde biraz arastirinca bu => http://karuppuswamy.com/wordpress/2012/01/28/how-to-use-c-library-in-python-generating-python-wrappers-for-c-library/ makaleye rastladim.Belki isinize yarar

Şöyle yapın:

Once c dosyasını açtıgınız yerde terminal açın ve şu komutu verin.

gcc -shared -Wl,-soname,adder -o [your_new_file.so] -fPIC [your_c_file.c]

Bu komut aynı dizinde bir so uzantılı bir dosya oluşturacaktır.Sonra aynı dizinde şunları yazarak so dosyasını yukleyebilirsin:

from ctypes import *
ilkCkutuphanem = CDLL("./deneme.so")
#C kutuphanen içindeki istedigin fonksiyonu kullanabilirsin.

Ornek:

a.c

int top(int a,int b){
    return a+b;}

Diye c dosyan olsun.Şu komutu yaz terminale:

gcc -shared -Wl,-soname,adder -o a.so -fPIC a.c

Sonra aynı dizinde

b.py

from ctypes import *
ilkCkutuphanem = CDLL("./a.so") #a.so yazma içine,dizini bulamadı ./a.so işini gorur
#C kutuphanen içindeki istedigin fonksiyonu kullanabilirsin.
sonuc = ilkCKutuphanem.top(1,2)
print(sonuc)

Ve scripti çalıştır sonucu gor.

Kolay gelsin,ben de bunu dun başardim,sadece araştırma gerektiriyor. :slight_smile:

5 Beğeni

@Cihat_Altiparmak harika bir anlatım olmuş, çok teşekkürler.

1 Beğeni

makale çok iyi teşekkürler.