Spec-Zone.ru › Python 3.13

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

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

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

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

PyObject *PyInit_modulename(void)

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

Для модулей с именами только на основе ASCII функция должна называться PyInit_<modulename>, где <modulename> заменяется именем модуля. При использовании многофазной инициализации разрешены имена модулей, содержащие не только ASCII-символы. В этом случае имя функции инициализации — PyInitU_<modulename>, где <modulename> закодировано с использованием кодировки punycode Python с заменой дефисов на нижние подчеркивания. В 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.13/extending/building.html

Spec-Zone.ru

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