Spec-Zone.ru › Python 3.12

Создание расширений на C и C++

Расширение на C для CPython — это разделяемая библиотека (например, файл .so в Linux, .pyd в Windows), экспортирующая функцию инициализации.

Чтобы разделяемую библиотеку можно было импортировать, она должна находиться в PYTHONPATH, а её имя должно соответствовать имени модуля и иметь подходящее расширение. При использовании setuptools правильное имя файла генерируется автоматически.

Функция инициализации имеет следующую сигнатуру:

PyObject *PyInit_modulename(void)

Она возвращает либо полностью инициализированный модуль, либо экземпляр PyModuleDef. Подробнее см. раздел Инициализация модулей на C.

Для модулей, имена которых содержат только символы ASCII, функция должна называться PyInit_<modulename>, где <modulename> заменяется именем модуля. При использовании многофазной инициализации допускаются имена модулей, содержащие символы не из ASCII. В этом случае функция инициализации называется PyInitU_<modulename>, где <modulename> закодировано с помощью кодировки Python punycode, а дефисы заменены символами подчёркивания. В Python:

def initfunc_name(name):
    try:
        suffix = b'_' + name.encode('ascii')
    except UnicodeEncodeError:
        suffix = b'U_' + name.encode('punycode').replace(b'-', b'_')
    return b'PyInit' + suffix

Можно экспортировать несколько модулей из одной разделяемой библиотеки, определив несколько функций инициализации. Однако для их импорта потребуется использовать символические ссылки или собственный импортёр, поскольку по умолчанию находится только функция, соответствующая имени файла. Подробнее см. раздел «Несколько модулей в одной библиотеке» в PEP 489.

4.1. Создание расширений на C и C++ с помощью setuptools

Python 3.12 и более поздние версии больше не поставляются с distutils. Подробнее о создании и распространении расширений на C/C++ с помощью setuptools см. в документации setuptools по адресу https://setuptools.readthedocs.io/en/latest/setuptools.html.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/extending/building.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API