2011-08-18 14 views
31

Mam ogromne moduły Pythona (+8000 linii). Zasadniczo mają one mnóstwo funkcji do interakcji z platformą sprzętową poprzez port szeregowy, odczytywanie i zapisywanie w rejestrach sprzętowych.Użyj Cython jako konwertera Python to C

Nie są to algorytmy numeryczne. Tak więc aplikacja jest po prostu odczytywaniem/zapisywaniem do rejestrów sprzętowych/pamięci. Używam tych bibliotek do pisania niestandardowych skryptów. W końcu muszę przenieść wszystkie te rzeczy, które mają być uruchomione w procesorze osadzonym na moim sprzęcie, aby mieć lepszą kontrolę, po prostu uruchamiam zdarzenie z komputera, a reszta jest w sprzęcie.

Muszę więc przekonwertować je na C. Jeśli mogę przekonwertować moje skrypty do C za pomocą automatycznego narzędzia, zaoszczędziłoby mi to ogromnego czasu. Właśnie dlatego przyciągnąłem do Cythona. Wydajność nie jest ważna, moje kody nie są numeratorami. Ale wygenerowany kod powinien być względnie mały, aby zmieścił się w mojej ograniczonej pamięci (kilkaset Kilobajtów).

Czy mogę używać Cythona jako konwertera dla moich niestandardowych skryptów w języku Python? Zgaduję, że tak, w takim razie czy mogę użyć tych plików .c do uruchomienia mojego sprzętu? Domyślam się, że nie muszę mieć Cythona w moim sprzęcie, aby mogli go uruchomić. Ale jeśli po prostu tworzy jakieś pliki .c, mogę przejść i zrobić to samodzielnie, ponieważ kod nie korzysta z wielu funkcji Pythona, wystarczy go użyć jako szybki skrypt do implementacji.

+0

Czy ktoś naprawdę odniósł sukces? Czuję, że bardzo trudno będzie debugować. Naprawdę chcę to zrobić z Cython/PyPy, ale wygląda na to, że testowanie może być bardzo interesujące ... – radix07

Odpowiedz

40
  1. Tak, u podstaw tego właśnie jest Cython. Ale ...
  2. Nie potrzebujesz Cythona, jednak potrzebujesz libpython. Możesz mieć wrażenie, że nie korzysta z tak wielu funkcji Pythona, ale myślę, że jeśli spróbujesz tego, okaże się, że nie jest to prawdą - nie będziesz w stanie oddzielić programu od jego zależności od libpython, nadal używając Pythona. język.

Inną opcją jest PyPy, a konkretnie to translation toolchain, NIE interpreter pypy Python. To pozwala przetłumaczyć RPython, podzbiór języka Python, na C. Jeśli naprawdę nie używasz wielu funkcji językowych w Pythonie lub bibliotek, to może działać.

PyPy jest najczęściej nazywany alternatywną implementacją Pythona, ale jest także zbiorem narzędzi do kompilowania dynamicznych języków na różne formy. To właśnie pozwala na implementację PyPy w Pythonie, napisanym w (R) Pythonie, do kompilacji na kod maszynowy.

Jeśli C++ jest dostępny, Nuitka jest kompilatorem Python to C++, który działa dla zwykłego Pythona, a nie tylko z RPython (który jest tym, co używa Shedskin i PyPy).

+0

Więc to tłumacz, który daje .c? Myślałem, że jest to specyficzna implementacja pythona do szybkiego wykonywania. Szybkie działanie nie jest moją troską. –

+0

Przeczytaj uważnie odpowiedź. PyPy to __twoja rzeczy__, implementacja języka Python i translator/kompilator języka Python. Nie chcesz tego pierwszego, chcesz drugiego. Zespół narzędzi tłumaczeniowych, z którym połączono, zawiera szczegółowe informacje na temat tego, co chcesz. – agf

+1

Zaktualizowałem swój wpis, aby dodać bezpośrednie odpowiedzi na twoje pytania. – agf

2

Jeśli dla tej platformy wbudowanej dostępne jest C++, jest shed skin, konwertuje python na C++.

+2

Słyszałem o ShedSkin, ale nie mogę mu ufać. Wydaje się, że jest on bardziej solidny i szeroko stosowany z bardzo pozytywnymi recenzjami . –

+0

Dla C++ istnieje również Pythran. – boardrider