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. Обратитесь к документации setuptools по адресу https://setuptools.readthedocs.io/en/latest/setuptools.html, чтобы узнать больше о создании и распространении расширений на C/C++ с помощью setuptools.

© 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