2012-09-27 20 views
15

Son 3 saati, etkileşimli modda Python'u devre dışı bırakıp açamayacağını veya linux için çalıştırılabilir python'un boyutunu nasıl edinebileceğimi bulmaya çalıştım.Gömülü Python yorumlayıcısının boyutunun en iyi duruma getirilmesi

Gömülü bir aygıt için olduğunu tahmin edebileceğiniz gibi ve çapraz derleme Python yaklaşık 1MB büyük ve benim için çok fazla olduğunu. Şimdi

sorular:

Python yürütülebilir küçülmeye imkan var mı? Belki interaktif modu devre dışı bırakmak (komut satırında Python programlarını başlatmak).

Yapılandırma seçeneklerini aradım ve bunlardan bazılarını denedim ancak yürütülebilir dosyam için herhangi bir değişiklik yapmıyor.

Gcc'den optimize edilmiş seçeneklerle derledim ve zaten soyulmuş.

+0

(bu [SO soru] Bkz http://stackoverflow.com/questions/240996/anyone-using-python-for-embedded-projects?rq=1) 16MB RAM – Mark

+0

içinde çalıştırmak için okudum ama sorun tinypy 2008'den beri güncellenmedi! Ve küçücük için tüm kütüphaneleri kullanmak ya da kullanımı kolay değil! Her kütüphane için çok fazla çalışma. piton az 500kb – Benny

+1

Birçok yıllık bir boyuta sahip olduğunu İmkansız hedefi önce birçok farklı tercümanlar denedikten sonra biz karar, gömülü donanım kullanılan bir şirkette oldu ve bir Forth gömülü. Yürütülebilir dosyalar yerel ikiliden daha küçüktü, ben sizi değil. –

cevap

2

Sadece yapılandırmakla biraz daha fazla tıklatabilirsiniz, ancak daha fazlasını yapamazsınız.

Ayrıca, gerçek etkileşimli mod kodu oldukça önemsiz, bu yüzden orada çok fazla tasarruf edeceğinizden şüpheliyim.

Kullanmayacağınız daha önemli özellikler olduğundan, boyutu düşürmek için yorumlayıcıdan çıkarılabileceğini unutmayın. Örneğin, muhtemelen ayrıştırıcı ve derleyicinin büyük bir kısmını dışarı atabilir ve sadece bytecode'dan başka bir şeyle uğraşabilirsiniz. Sorun şu ki, bunu yapmanın tek yolu tercüman kaynağını kesmektir. (Ve bu, dünyanın en güzel kodu değil, bu yüzden yolunuzu öğrenmek için çok fazla zaman ayırmak zorunda kalacaksınız.) Ve aslında hangi özellikleri kesebileceğinizi bilmek zorundasınız.

Diğer tek alternatif, Python benzeri bir dil için daha küçük bir tercüman yazmaktır - örneğin, minik projeyi toplayarak. Ama yorumlarınızdan, "Python benzeri", çok yakın olmadığı sürece sizin için yeterli gibi görünmüyor.

Sanırım bir alternatif daha var: CPython'dan farklı, daha güzel bir Python uygulaması yapın. Sorun şu ki, Jython ve IronPython yerel kodlar değil (belki de JVM-> yerel derleyiciyi kullanabilir veya Jython'u bir J2ME JVM'inde yeterince kullanabiliyorsunuz?) Ve PyPy gerçekten gömülü olarak prime time için hazır değil. sistemleri. (Birkaç yıl bekleyebilir misin?) Yani, muhtemelen CPython'la sıkışmışsınızdır.

+2

+ 1 çalıştıran kullanın. Python'un 1Mb'ye sığması zaten bir başarıdır. uzay gömülü cihazda çok sıkı ise, benim ingilizce düzeltilmesi için hızlı yardım için ve tabii ki daha küçük (500kb daha az uyum iddia) Lua gibi alternatifler, –

+0

Thx beyler ele alacak! Bence bu boyutta Pyhton'a izin veriyoruz ve belki de daha fazla flaş alanımız olduğunda gelecekteki donanımımıza kuruyoruz. Tüm – Benny

+1

PyPy'ye THX, bu gibi dar ortamlarda kullanılmaya kesinlikle hazır olmayacaktır. Eklenen soyutlama kesinlikle büyüklüğüne ekler ve yürütülebilir dosyada gömülü JIT derleyicisi yardımcı olmaz. – fijal

5

sen reallly piton küçültmek isterseniz, o proje bir göz olabilir: Sitede söylediği gibi

http://code.google.com/p/python-on-a-chip/

:

Python-on-a-Chip (p14p), bir OS olmadan mikro denetleyiciler üzerinde Python dilinin önemli bir alt kümesini çalıştıran bir Python sanal makinesini (kod adı PyMite) geliştirmeye yönelik bir projedir. P14p'nin diğer parçaları , aygıt sürücüleri, üst düzey kütüphaneler ve diğer araçlardır. Bu projeyi tartışmak için lütfen python-on-a-chip google grubuna katılın.

Bu beklenenden biraz daha düşük seviyede olabilir, ama gerçekten daraltılır: PyMite VM

Özellikler:

  • kabaca 55 KB program hafızası
  • başlatır 4KB'den içinde gerektirir VERİ DEPOSU; "merhaba dünya" yazdır 5 KB gerekir; En az önerilen RAM 8KB'dir.
  • Python 2.6 den

Sen alabilir 29 anahtar kelime 25 ve 112 baytkodlarına 89 Destekler tamsayılar, yüzen, dizilerini, listeler, dicts, fonksiyonları, modüller, sınıflar, jeneratörler, dekoratörler ve kilitlere Destekler Bu projeden ilginç fikirler.

sadece yani sanal makine almak sakının. pyc dosyalarını çalıştırabilirsiniz, py değil. (pyc dosyaları çapraz platformdur, ancak py dosyalarından çok daha küçüktür)

Gerçekten de, en küçük python'u gerçekten hedeflerseniz, kütüphanenin bölümlerini, ancak derleyicinin kendisini de devre dışı bırakmanız gerekir.

Bu site ayrıca ilginç işaretçiler olabilir: http://www.awaretek.com/pymo.html

+0

+1. Çok ilginç. Bu temiz oda Python benzeri dil yerine CPython (mark-süpürme GC, stackless, hiçbir C uzantıları, vs.) kesmek gibi görünüyor. Bence OP'nin projesinin sıfırdan yapması için çok fazla iş olacağını düşündüm, ama PyMite üzerine inşa etmek mükemmel bir proje olabilir. Muhtemelen OP'nin ihtiyaç duyduğu stdlib işlevselliğinin büyüklüğüne bağlıdır. – abarnert

İlgili konular