2012-09-27 8 views
15

Ostatnie 3 godziny spędziłem próbując dowiedzieć się, czy można wyłączyć lub zbudować Pythona bez trybu interaktywnego lub jak uzyskać mniejszy rozmiar pliku pythonu dla systemu Linux.Optymalizowanie rozmiaru wbudowanego interpretera języka Python

Jak można się domyślić, jest to urządzenie wbudowane, a po kompilacji krzyżowej Python ma rozmiar około 1 MB i to za dużo dla mnie.

Teraz pytania:

Czy są możliwości, aby zmniejszyć plik wykonywalny Pythona? Może chcesz wyłączyć tryb interaktywny (uruchamiając programy Python w linii poleceń).

Szukałem opcji konfiguracyjnych i wypróbowałem niektóre z nich, ale nie powoduje to żadnych zmian w moim pliku wykonywalnym.

Kompiluję go zoptymalizowanymi opcjami z gcc i jest już usunięty.

+0

Zobacz to pytanie [SO] (http://stackoverflow.com/questions/240996/anyone-using-python-for-embedded-projects?rq=1) do uruchomienia w 16MB pamięci RAM – Mark

+0

przeczytałem, ale problem polega na tym, że tinypy nie był aktualizowany od 2008 roku! A do malutkiego nie można użyć wszystkich bibliotek lub nie jest to łatwe w użyciu! Za dużo pracy dla każdej biblioteki. Niemożliwy cel, dla którego pyton miał rozmiar mniejszy niż 500kb. – Benny

+1

Wiele lat temu byłem w firmie, która korzystała z wbudowanego sprzętu i po wypróbowaniu wielu różnych interpretatorów zdecydowaliśmy się na embedded Forth. Pliki wykonywalne były mniejsze niż rodzimy plik binarny, ale nie żartuję. –

Odpowiedz

2

Możliwe, że można je nieco ograniczyć, konfigurując, ale niewiele więcej.

Ponadto, kod trybu interaktywnego jest dość trywialny, więc wątpię, że wiele tam zaoszczędzisz.

Jestem pewien, że istnieją bardziej istotne funkcje, z których nie korzystasz, aby można było wyłuskać interpreter, aby zmniejszyć rozmiar. Na przykład prawdopodobnie wyrzucisz duży fragment analizatora składni i kompilatora i nie będziesz zajmował się tylko bajtiem. Problem polega na tym, że jedynym sposobem na zrobienie tego jest zhakowanie źródła tłumacza. (I to nie jest najpiękniejszy kod na świecie, więc będziesz musiał poświęcić sporo czasu na naukę.) I będziesz musiał wiedzieć, jakie funkcje możesz w rzeczywistości zhackować.

Jedyną inną prawdziwą alternatywą byłoby napisanie mniejszego interpretera dla języka podobnego do Pythona - np. Poprzez podniesienie projektu tinypy. Ale z twoich komentarzy, nie brzmi to tak, jakby "Python-like" jest wystarczający dla ciebie, chyba że jest bardzo blisko.

Cóż, przypuszczam, że jest jeszcze jedna alternatywa: Podejmij inną, ładniejszą implementację w języku Python niż CPython. Problem polega na tym, że Jython i IronPython nie są natywnym kodem (chociaż może możesz użyć natywnego kompilatora JVM-> lub może wciągnąć wystarczająco Jythona do JVM J2ME?), A PyPy naprawdę nie jest gotowy na prime time w osadzonym systemy. (Czy możesz poczekać kilka lat?) Więc prawdopodobnie utknąłeś w CPython.

+2

+1 z powyższymi instrukcjami. Posiadanie Pythona mieszczącego się w 1Mb jest już całkiem dużym osiągnięciem. Jeśli przestrzeń jest tak ciasna na urządzeniu wbudowanym, rozważałbym mniejsze alternatywy, takie jak lua (podobno mieszcząca się w mniej niż 500kb) –

+0

Thx dla was za szybką pomoc i oczywiście za korektę mojego angielskiego! Myślę, że teraz pozwoliliśmy Pyhton na ten rozmiar i prawdopodobnie zbudowaliśmy go w naszym przyszłym sprzęcie, gdy mamy więcej miejsca na flash. THX dla wszystkich – Benny

+1

PyPy najprawdopodobniej nigdy nie będzie gotowy do użycia w tak ograniczonym środowisku. Dodana abstrakcja zdecydowanie zwiększa rozmiar, a kompilator JIT osadzony w pliku wykonywalnym nie pomaga. – fijal

5

Jeśli reallly chcą pytona kurczyć, można rzucić okiem na te przedsięwzięcia:

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

jak wspomniano na stronie:

python-on-a-Chip (p14p) to projekt polegający na opracowaniu zredukowanej maszyny wirtualnej Python o nazwie (o nazwie kodowej PyMite), która obsługuje znaczną część języka Python na mikrokontrolerach bez systemu operacyjnego. Inne części p14p to sterowniki urządzeń, biblioteki wysokiego poziomu i inne narzędzia. Dołącz do grupy google-python-on-a-chip, aby omówić ten projekt z .

To może być trochę niższy poziom niż oczekiwano, ale to naprawdę jest shrinked:

Charakterystyka PyMite VM:

  • Wymaga grubsza programu 55 KB pamięci
  • inicjuje w 4KB BARAN; drukuj "Witaj świecie" potrzebuje 5KB; 8 KB to minimalna zalecana pamięć RAM.
  • Obsługuje całkowitymi, pływaków, krotki, listy dicts, funkcje, moduły, klasy, Generatory, dekoratorów i zamknięć
  • Obsługuje 25 z 29 słów kluczowych i 89 112 bytecodes z Pythonem 2.6

można dostać ciekawe pomysły z tego projektu.

Pamiętaj, że dostajesz tylko maszynę wirtualną, tj. możesz uruchamiać pliki pyc, a nie py. (pliki pyc są jednak wieloplatformowe i dużo mniejsze niż pliki py)

W rzeczywistości, jeśli naprawdę celujesz w najmniejszego pytona, musisz wyłączyć części biblioteki, ale może także sam kompilator.

Ta witryna może mieć ciekawe wskazówki również: http://www.awaretek.com/pymo.html

+0

+1. Bardzo interesujące. Wygląda jak czysty język w stylu Pythona, a nie hackowanie CPython (GC ze znacznikami, bez stacków, bez rozszerzeń C itd.). Myślę, że zasugerowałem, że byłoby to zbyt dużo pracy, aby projekt PO był w stanie zrobić od zera, ale zbudowanie PyMite może być całkowicie rozsądnym projektem. Prawdopodobnie zależy to od tego, ile funkcji stdlib potrzebuje OP. – abarnert