2010-11-23 22 views
23

(Ya da "PyPy/RPython Python çalışma zamanını gerektirmeden/derleme C/C++ için Python çevirmek için kullanılabilir mi?")PyPy/RPython, küçük bağımsız bir yürütülebilir dosya oluşturmak için kullanılabilir mi?

Ben onun RPython ve Python, kendi çalışırken PYPY kavramaya çalıştık ve onun derlenmesi ve tercüme edilmesi ve bir şekilde başarısızlığı.

Varsayımsal bir Python projem var (Windows için); Ben onun boyutu aşağı, yüzlerce kilobayt (O.N.O.) yerine py2exe kullanarak (UPX sonra) kullanarak birkaç megabayt yerine tutmak istiyorum. Pyyt 'u herhangi bir şekilde Python26.dll dosyasına bağımlı olmayan bağımsız bir yürütülebilir dosya üretmek için kullanabilir miyim? Yapabiliyorsam, yalnızca yerleşik türlerde çalışan for gibi RPython kısıtlamalarını takip etmesi gerekiyor mu, yoksa tam Python sözdizimi mi?

Bu yapılabilirse, hemen hemen kesinlikle Python'un C modüllerini kullanamayacağımı anlıyorum.


(sorma zamandan beri, durum daha net hale geldi ve toolchain bu kısmı daha net RPython ziyade PYPY olarak damgalandı, aynı 2010 yılında böyle değildi)

+1

Bu, neredeyse istediğiniz kadar küçük bir yürütülebilir dosyayı üretmeyecektir, ancak ilgili olduğu için, cython'un artık tek başına çalıştırılabilir dosyalar oluşturabileceğini iddia ettiğine inanıyorum: http://wiki.cython.org/EmbeddingCython –

+0

@Forest: Cython'un bunu yapabildiğini farketmedim, ancak Python çalışma zamanı gerektirdiğinden dolayı py2exe + UPX'ten herhangi bir (veya en azından çok) küçük olma olasılığının düşük olduğunu düşünüyorum. –

+0

Burada yankı var mı? –

cevap

17

Evet, PyPy, RPython kodundan bağımsız çalıştırılabilir dosyalar üretebilir. Bu, yazma kodu söz konusu olduğunda tüm garip RPython kurallarına uymanız gerektiği anlamına gelir. Python kodunuzun kutunun dışında işlev görmesi tamamen olası değildir ve varolan Python kodunun taşınması genellikle eğlenceli değildir. C gibi küçük yürütülebilir dosyalar yapmayacaktır, fakat örneğin rhipton hedefini kullanarak (pypy/translator/goal'dan) boehm GC kullanarak soymadan sonra 64bit 80k'dir.

+0

Bunun için teşekkürler. Bu bilmek istediğim ve cevabın beklendiği gibi. Sormayı unuttuğum ikincil bir soru, Windows API'ya PyPy aracılığıyla erişmek mümkün mü? 'Ctypes.windll' çalışır mı yoksa daha karmaşık mı olur? –

+0

ctypes RPython'da çalışmıyor. C arayüzü var, rffi denir, kullanım için grep (modülleri kullanır). Orada ve burada, kaynak bakmak bakmak oldukça bir pencere API biraz var (üzgünüm, ama bu tüm iç şeyler, hiçbir docs ;-) – fijal

+0

Tamam, teşekkürler. Eğer ona ulaşırsam, bir göz atacağım. –