Я генерирую некоторый код C во время выполнения в Python.Каков наилучший способ скомпилировать этот код в что-то , которое можно вызвать из Python?Я знаю, что я могу сделать:
import subprocess
from ctypes import cdll
subprocess.run(['gcc', '-shared', '-o', 'tempfile.so', 'tempfile.c'])
main_function = cdll.LoadLibrary('tempfile.so').main
Но это большая работа, чтобы решить все крайние случаи и проблемы переносимости, связанные с этим решением.Я надеялся, что это достаточно распространенная проблема, поскольку у него есть стандартное решение, которое абстрагирует сложные части (поиск установленного компилятора, запись во временный каталог, обработка ошибок, очистка мусора и т. Д.).
Я обнаружил, что weave
может сделать это, но это только Python 2.Я на Python 3.
Это не вопрос о том, как импортировать уже скомпилированный C-код.Я знаком с ctypes
.
Это также не вопрос создания другого кода, который может быть обработан проще.Я знаком с numba
и cython
, которые компилируют код Python, но если у них нет скрытой возможности принимать чистый код C, это не будет работать, потому что код C генерируется внешним инструментом.