ГЛАВА 19. ИМПОРТИРОВАНИЕ МОДУЛЕЙ, НАПИСАННЫХ НА ЯЗЫКЕ C

Все действия в этой главе производятся в ОС Linux/Debian, поэтому требуется предварительно ее установить.

Для создания модулей на языке С воспользуемся пакетом distutils58, входящим в состав стандартной библиотеки Python.

Рассмотрим пример создания собственного Python-модуля на языке С. Для этого нам понадобится создать файл на языке С (ownmod.c), представляющий сам модуль:

Затем формируем файл setup.py:

from distutils.core import setup, Extension
module1 = Extension( ‘ownmod’, sources = [‘ownmod.c’] )
setup( name = ‘ownmod’,
version = ‘1.1’,
description = ‘This is a first package’,
ext_modules = [module1]
)

Выполняем в командной строке (устанавливаем модуль):

# python3 setup.py build

running build
running build_ext
building ‘ownmod’ extension
i586-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrictprototypes -g -fstack-protector-strong -Wformat -Werror=formatsecurity -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.4m -c
ownmod.c -o build/temp.linux-i686-3.4/ownmod.o
ownmod.c:23:16: warning: function declaration isn’t a prototype [-
Wstrict-prototypes]
PyMODINIT_FUNC PyInit_ownmod() {
^
ownmod.c: In function ‘PyInit_ownmod’:
ownmod.c:32:1: warning: control reaches end of non-void function [-
Wreturn-type]
}
^
i586-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions —
Wl,-z,relro -Wl,-z,relro -g -fstack-protector-strong -Wformat —
Werror=format-security -D_FORTIFY_SOURCE=2 build/temp.linux-i686-
3.4/ownmod.o -o build/lib.linux-i686-3.4/ownmod.cpython-34m.so

Выполняем в командной строке с правами администратора:

# python3 setup.py install

running install
running build
running build_ext
running install_lib
copying build/lib.linux-i686-3.4/ownmod.cpython-34m.so ->
/usr/local/lib/python3.4/dist-packages
running install_egg_info
Removing /usr/local/lib/python3.4/dist-packages/ownmod-1.1.egg-info
Writing /usr/local/lib/python3.4/dist-packages/ownmod-1.1.egg-info

Теперь можем запустить интерпретатор: