2012-07-16 10 views
12

'un birbirine bağımlı olduğu birkaç python modülüne (paketler halinde düzenlenmiş) sahibim. Örneğin.Cython'u kullanarak birden çok python modülünü (veya paketini) derlemek ve bağlamak nasıl?

  • Modül1
  • Module2: module1'i
  • module3 ithal
  • Module4: ithalat module3, Modül 2, 1

uygulamalarını geliştirmek için ilgili arayüz Module4 ve I olduğunu düşünelim Modülü cython kullanarak bir Module4.so oluşturmak istiyorum. Eğer naif bir şekilde devam edersem, BUT ithal edebilen bir Module4.so uzantısına sahip olursak, uzantısı, Module1, Module2, Module3 modülünün python kaynak koduna dayanır.

Ayrıca Module1, Module2, Module3 modüllerinin derlenmesi ve bunlara Modül 4 için derlenmesinin bir yolu var mı? nolu her şeyi manuel olarak yapmaktan kaçınmak istiyorum, ör. Önce Module1.so sonra Module1.so yerine Module1.so almak, sonra Module2.so modül2.so ve Module2.so içine derlemek için ithalat deklarasyonu Modülü2 derleyin.

Teşekkürler!

cevap

9

Düzeltme. İlk iki seçenek Cython'un özel koduna atıfta bulunarak, neyi özlediğimin sorusunun saf python modülleriyle ilgili olması, yani seçenek 3'ün çözüm olmasıdır.

1. bu "Nasıl Bir Paket içinde Modülleri bir hiyerarşisini Oluşturma" Bakınız::

2. https://github.com/cython/cython/wiki/PackageHierarchy

ben "include" deyimi tercih:

birkaç seçenek vardır http://docs.cython.org/src/userguide/language_basics.html#the-include-statement Birçok .pyx dosyam var ve hepsi main.pyx dosyasına dahil edildi, hepsi bir ad alanında. bkz -

setup(
    cmdclass = {'build_ext': build_ext}, 
    ext_modules = [Extension("example", sourcefiles), Extension("example2", sourcefiles2), Extension("example3", sourcefiles3)] 
) 

4. Daha verimli derleme: http://code.google.com/p/cefpython/source/browse/cefpython.pyx 3. birden fazla "Uzatma" ekleyerek bir kez kurulumu kullanarak ucunda tüm modüllerini derlemek olabilir

: Sonuç büyük bir modüldür here.

setup (
    name = 'MyProject', 
    ext_modules = cythonize(["*.pyx"]), 
) 
+0

Teşekkürler, seçenek 3, Module3.so yerine otomatik olarak Module3.py dosyasını içe aktarmaya özen gösterir (yukarıdaki örneğe bakacağım)? – Mannaggia

+0

@Mannaggia, Ahh, şimdi Cython'a özgü özellikleri kullanmadığınızı görüyorum ("pyx" dosyaları), sadece normal python modüllerini cython kullanarak derlemek istiyorsunuz. Evet, "import Module1" ifadesi, "Module1.py" veya "Module1.so" içe aktarma için çalışır - her iki dosyayı aynı dizine koymadım, o zaman hangi modülün alınacağını bilmiyorum. Hiçbir şey değişmez. .İçe aktarma sırasında bir .py dosyası gibi ele alınır. –

+1

@Mannaggia, Hiçbir şey değişmez, .so içe aktarırken bir .py dosyası gibi ele alınır. .py modüllerini derledikten sonra .her şey kutunun dışında çalışmalıdır. –

İlgili konular