Подтвердить что ты не робот

Можем ли мы использовать код C в Python?

Я знаю, что Python предоставляет API, поэтому вы можете вызывать Python-интерпретатор в коде C, но то, что я хочу, является противоположным.

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

Если я хочу, чтобы C-код был библиотекой, что означает, что я использую его с #include и связью *.o, вероятно, в Python, как это сделать? Это возможно? Если я напишу код C в исполняемый файл, что означает, что он станет командой, могу ли я вызвать его прямо в Python?

Кроме того, я слышал, что код Python может быть скомпилирован, значит ли это, что мы можем выполнить код без исходного файла? Являются ли выходные файлы двоичными файлами? Улучшает ли производительность?

4b9b3361

Ответ 1

Я хочу вызвать те функции C или исполняемые файлы в python. Возможно ли это.

Да, вы можете написать код C, который можно импортировать в Python в качестве модуля. Python называет эти модули расширения. Вы можете вызвать его непосредственно из Python, например, из документации:

Код Python

import example
result = example.do_something()

C Код

static PyObject * example(PyObject *self)
{
    // do something
    return Py_BuildValue("i", result);
}

Если я хочу, чтобы C-код был библиотекой, это означает, что я использую его С#include и связью *.o, вероятно, в python, как это сделать или возможно.

Вы создаете его как общую библиотеку *. dll или *. so Вы также можете исследовать использование distutils для распространения вашего модуля.

Если я пишу код C в исполняемый файл, что означает, что он становится командой, могу ли я вызвать его непосредственно в python?

Если вы пишете *.exe, то вы делаете обратное (вызывая Python из C). Выбранный вами метод (exe vs shared library) зависит от того, хотите ли вы "программу C с некоторым Python" или "программу Python с некоторым C".

Кроме того, я слышал, что код python может быть скомпилирован, значит ли это, что мы можем выполнить код без исходного файла? Являются ли выходные файлы двоичными файлами? Улучшает ли производительность?

Python считывает файлы *. py и компилирует файлы *.pyc bytecode при запуске. Затем байт-код запускается на виртуальной машине Python. Это означает, что "выполнение того же файла происходит быстрее во второй раз, поскольку можно избежать перекомпиляции из источника в байт-код". (из глоссария Python) Итак, если вы не отредактировали свои файлы *. py, он запустит *. pyc. Вы можете распространять файлы *.pyc без файлов *. Py, однако они не зашифрованы и могут быть обратно спроектированы.

Ответ 2

Вам не нужно расширять Python (который не является тривиальным, btw), но может использовать интерфейс внешних функций, например ctypes.