Как скомпилировать целую библиотеку Python вместе с ее зависимостями, чтобы ее можно было использовать в C (без вызова среды выполнения Python).
Это невозможно в общем. Практически ожидается, что код Python будет выполняться на интерпретаторе Python.
Иногда, когда используется только небольшое подмножество Python (даже косвенно всем, что использует ваш код Python), вы можете использовать Cython (который на самом деле является надмножеством маленького подмножество Python: многие подлинные возможности Python не могут быть использованы в Cython или используют интерпретатор Python). Но не каждый код Python может быть цитонизирован, поскольку Python и C имеют очень различную (и несовместимую) семантику (и управление памятью ).
В противном случае (и чаще всего) код C, использующий ваш Python, должен встраивать интерпретатор Python .
Более разумный и надежный подход, если ваша цель состоит в том, чтобы сделать самодостаточную C-библиотеку пригодной для использования во многих C-программах (в системах без Python), состоит в том, чтобы переписать ваш код на C .
Вы также можете рассмотреть запуск (в вашей C-библиотеке) какого-либо процесса Python (подобного серверу, выполнение ваших Python) и использование средств межпроцессного взаимодействия , которые будут зависеть от операционной системы. Конечно, Python должен быть установлен в системе приложения, использующего вашу библиотеку. Например, для Linux вы могли бы разветвить некоторый процесс Python в вашей библиотеке и использовать pipe (7) или unix (7) сокетов для связи из библиотеки C с этим процессом ( возможно, используя что-то вроде JSONRPC ).
Ваше редактирование (все еще не MCVE ) показывает некоторое взаимодействие HTTP, выполненное в Python. Вы можете подумать об этом в C с помощью клиентских библиотек HTTP в C, таких как libcurl , или (при необходимости) библиотек HTTP-серверов, таких как libonion .
Так что подумайте о переписывании ваших вещей на C, но используя несколько существующих C библиотек (как и что выбрать - это совсем другой вопрос, вероятно, не по теме в StackOverflow ). В противном случае примите зависимости от Python.
Фактический вариант использования - сбор / обработка данных робототехники в C с высокой частотой дискретизации. Хотя C отлично подходит для базовой обработки данных, существуют отличные библиотеки Python, которые позволяют проводить гораздо более полный анализ.
Вы можете хранить высокоуровневые вещи в Python (см. это ), но перекодировать низкоуровневые вещи в C, чтобы ускорить их (многие программы делают это, например, TensorFlow, ...), возможно, как расширений в C для Python или в каком-либо другом процессе. Конечно, это означает некоторые усилия по развитию. Я не думаю, что полностью избегать Python (полностью избавиться от Python не прагматично), если вы используете много кода на Python. Кстати, вы могли бы, возможно, рассмотреть возможность встраивания какого-либо другого языка в ваше приложение C (например, Lua, Guile, Ocaml - все они, по слухам, работают быстрее, чем Python) и оставить Python на более высоком уровне, работающем в каком-то другом процессе.
Вам нужно приложить больше усилий для архитектурного дизайна вашей вещи. Я не уверен, что полностью избегать Python - разумная вещь. Смешивание Python и C (возможно, с помощью нескольких взаимодействующих процессов) может быть разумнее. Конечно, вы будете иметь специфические для операционной системы вещи (особенно на стороне C, для межпроцессного взаимодействия). Если на Linux, прочитайте кое-что о системном программировании Linux на C, например ALP или что-то более новое.