Как скомпилировать целую библиотеку Python вместе с ее зависимостями, чтобы ее можно было использовать в C (без вызова среды выполнения Python). То есть в скомпилированный код встроен интерпретатор Python, и Python не нужно устанавливать в систему.
Насколько я понимаю, когда код Python скомпилирован с использованием Cython, он:
- Не вызывает среду выполнения Python, если используется аргумент
--embed
- Компилирует файлы по отдельности
- Позволяет вызывать различные модули (из среды выполнения Python/других скомпилированных файлов Cython)
Остается неясным вопрос:
- Как использовать эти файлы модулей из C? Могут ли скомпилированные файлы Python вызывать другие скомпилированные файлы Python при использовании в C?
- Нужно ли объявлять только точку входа в библиотеку или нужно объявлять все функции?
- Как управлять зависимостями Python? как их тоже скомпилировать (чтобы не нужна была среда выполнения Python).
Упрощенный пример библиотеки Python с именем module
, где __init__.py
— пустой файл:
module/
├── run.py
├── http/
│ ├── __init__.py
│ ├── http_request.py
http_requests.py
содержит:
import requests
def get_ip():
r = requests.get('https://ipinfo.io/ip')
print(r.text)
и run.py
содержит следующее:
from http import http_request
if __name__ == '__main__':
http_request.get_ip()
Как вызвать функцию get_ip
из C без использования среды выполнения Python (необходимо установить Python при запуске приложения).
Приведенный выше пример очень прост. Фактический вариант использования — сбор/обработка данных робототехники на C с высокой частотой дискретизации. Хотя C отлично подходит для базовой обработки данных, существуют отличные библиотеки Python, которые позволяют проводить гораздо более полный анализ. Цель состоит в том, чтобы вызвать библиотеки Python для данных, которые были частично обработаны в C. Это позволит нам получить гораздо более подробное представление о данных (и обработать их в «реальном времени»). Фреймворки данных слишком велики, чтобы наша команда могла переписать их на C.