2010-06-20 10 views
5

Bu konuyu merak ettim ama hiçbir zaman kesin bir cevabı almadım. Boost.python çerçevesinde başka bir boost.python modülüne bağlanması mümkün mü? Örneğin boost_python_module (libA) içinde A sınıfını ihraç ettim ve boost_python_module (libB) içinde B (A a) işlevini kullandım. LibA'nın A'ya bağlanması için libB'de belirtilmesi mümkün mü?Varolan takviye python modülüne nasıl bağlanır

Bu soruna bakmanın diğer bir yolu şu anda tek bir modüldeki tüm bağlarımın tek bir modülde oluşturmasıdır. Çeşitli boost_python_module üzerinde adım adım artımlar üretilebilir.

+0

Bu soru çok eskidir, bu nedenle destek bir şeylerin sabitlendiğinden emin değilim veya OP biraz ayrıntıyı gözden kaçırdı, ancak bu davranışı sürüm 1.48 ile gözlemlemedim. Aynı türdeki iki boost :: python modülünü ayrı ayrı derlediğinizde, bir destek python modülü tarafından yaratılan bir örneği başka bir destek python modülü tarafından tanımlanan bir işleve aktarabilirsiniz. – enobayram

cevap

0

Paylaşılan kitaplığı iyi bilmiyorum, ancak python: import libA; import libB: python içindeki tüm modüllerimi kullanabileceğim tüm modüllerimi almak benim için işe yarar.

Bu ithalatı __init__.py dosyasında koymak mümkündür, böylece whitin python'u yapmanız yeterlidir: import myLib.

+0

Merhaba rafak, Sorun, libA ve libB ve C++ kodları için sarmalayıcılar olması nedeniyle oluyor. LibA'dan bir nesneyi libB'deki bir işleve nasıl iletebilirim. -Sandeep – Sandeep

+0

Düzeltmeyi anlarım, ne yapmak istediğinizi sorunum yok. Dışa aktarılan tipler için bir çeşit küresel kayıt olduğunu düşünüyorum. Bu yüzden önce libA'yı (üzerinde LibB'ye bağlı olduğu için A sınıfı kullanır) ve sonra libB'yi içe aktarırdım. Hangi hata (varsa) alırsınız? – rafak

+0

Ben aslında aynı sorunu var inanıyorum - Ben birbiriyle ilişkili birden fazla farklı destek :: python projeleri var. Birinde tanımlanmış bir tür diğer Python'da mevcut görünmüyor. Ben C++ türü "hataları için bulunan" No to_python (by-value) dönüştürücü "alıyorum. Aynı uzatma modülünden ayrılırsam, bunlar gider. –

1

Boost.Python, sormak istediklerinizin üstesinden gelmek için paketinizi as explained in the tutorial derleme birimlerine bölmek ve daha sonra modülleri gerçekten bildiren bir ana derleme biriminde birleştirme yapmaktır.

Boost.Python'daki bağımsız modülleri, modülünüzü yüklediğinizde Python tarafından yürütülen belirli Python giriş noktalarını bildirdikleri için bağlayamazsınız. Örneğin, ikili modül adı mod.so ise, Python yorumlayıcısı init_mod (BOOST_PYTHON_MODULE(mod) bildiren) işlevini arar ve bu işlevin kodunu yürütür. Bu işlevin kodu içinde, nesnelerin Python C-API bildirimlerini (örnekler, sınıflar, vb.) Bulmayı bekler. Bağlamak Eğer

, örneğin, başka modül ikili (diyelim ki, foo.so) için mod.so ikili, Python yükler mod.so, ederdi sadece Bul ve init_mod yürütmek ve init_foo göz ardı eder.

İlgili konular