2010-07-15 34 views
7

İnsanların sarmalayıcılar için yazdığını görüyorum, X dilinde yazılmış bir modülü Y dilinde kullanmak için söyleyin. Bu tür paketleyicileri yazmanın temellerini bilmek istedim. Biri nereden başlıyor? Buradaki sorum libgnokii için daha spesifiktir, bunun için nasıl python bağlamaları yazmaya başlarım.Bağlama ve sarmalayıcıların yazılması

cevap

7

Bunu okumak için şu baştan başlayabilirsiniz: extending python with c or c++ Ve sonra bunun çok fazla güçlük olduğuna karar verdiğinizde, swig veya muhtemelen Boost.Python ürününü denetleyebilirsiniz. ctypes da yararlı olabilir.

C++ sınıflarının elle kaydırma işlemini yaptım ve swig kullandım. swig kullanmak daha kolaydı, ama sonunda kolayca yapılmayan şeyler yapmak istedim (ya da nasıl olduğunu anlamaya çok tembeltim). Bu yüzden manuel ambalajlamayı bitirdim. Biraz iş var ama birazcık C biliyorsanız, bu çok yapılabilir. Sen C ile Python uzatmakla ilgili bilgi için here bakarak başlayabilirsiniz

2

Muhtemelen bunu yaparken bir şey Pythonic içine libgnokii API'sini çevirmek için nasıl düşünmek isteyeceksiniz. Çok fazla iş yapmak istemiyorsanız, tüm gnokii API çağrılarını Python işlevlerine çeviren ince bir sarıcı yazabilirsiniz.

+0

Söylemek Pythonic, tüm kütüphaneyi sıfırdan bir modül olarak yazmak anlamına mı geliyor? – tsudot

+2

Hayır, zorunlu olarak değil. Yaptığımın bir örneği: Üzerinde bir işlev kullanmadan önce bir nesne yapmam gereken bir C++ sınıfı vardı (bu durumda, işlev statik olmalıydı). Python modülü kullanıcısını aynı adımlardan geçmek yerine, python uzantımda bu sınıfın bir nesnesini inşa ettim ve işlevi bir python modülünde bir işlev olarak açığa çıkardım; Gerçekten gerekli. Yani, arayüzleri bir çeşit toparlamak. –

İlgili konular