Используйте Cython как конвертер Python в C - PullRequest
32 голосов
/ 18 августа 2011

У меня огромные модули Python (+8000 строк). У них в основном тонны функций для взаимодействия с аппаратной платформой через последовательный порт путем чтения и записи в аппаратные регистры.

Это не числовые алгоритмы. Таким образом, приложение просто читает / пишет в аппаратные регистры / память. Я использую эти библиотеки для написания пользовательских скриптов. В конце концов мне нужно переместить все эти вещи для запуска во встроенном процессоре на моем оборудовании, чтобы иметь более точный контроль, затем я просто запускаю событие с ПК, а остальное - на аппаратном обеспечении.

Так что мне нужно конвертировать их в C. Если я могу сделать так, чтобы мои скрипты конвертировались в C с помощью автоматического инструмента, это сэкономило бы мне огромное время. Вот почему меня привлекло Cython. Эффективность не важна, мои коды не являются номерами. Но сгенерированный код должен быть относительно небольшим, чтобы уместиться в моей ограниченной памяти (несколько сотен килобайт).

Могу ли я использовать Cython как конвертер для моих пользовательских скриптов Python в C? Я думаю, да, в каком случае я могу использовать эти файлы .c для запуска на моем оборудовании? Я предполагаю, что это не так, потому что я должен иметь Cython на моем оборудовании, чтобы они могли работать. Но если я просто создаю некоторые файлы .c, я могу пройти и сделать его автономным, так как код не использует большинство функций Python, он просто использует его как быстрый для реализации сценария.

Ответы [ 2 ]

40 голосов
/ 18 августа 2011
  1. Да, по сути, это то, что делает Cython.Но ...
  2. Вам не нужен Cython, однако вам нужен libpython.Вам может показаться, что он не использует так много возможностей Python, но я думаю, что если вы попробуете это, вы обнаружите, что это неправда - вы не сможете отделить вашу программу от ее зависимости от libpython, все еще используяязык Python.

Другой вариант - PyPy , в частности это набор инструментов перевода , НЕ интерпретатор PyPy Python.Это позволяет вам переводить RPython , подмножество языка Python, на C. Если вы действительно не используете много функций или библиотек языка Python, это может сработать.

PyPy в основном известенкак альтернативная реализация Python, но это также набор инструментов для компиляции динамических языков в различные формы.Это то, что позволяет PyPy-реализации Python, написанной на (R) Python, компилироваться в машинный код.

Если доступен C ++, Nuitka - это компилятор Python to C ++, который работаетдля обычного Python, а не только для RPython (именно этим пользуются shedskin и PyPy).

2 голосов
/ 18 августа 2011

Если C ++ доступен для этой встроенной платформы, есть shed skin , он преобразует python в c ++.

...