Это то, что происходит с динамическим модулем Python (по крайней мере, в текущей версии swig ):
- Имя модуля (давайте придерживаться пример , как в учебном пособии) указывается в файле .i :
%module example
- Во время сборки создаются 2 файла:
- _ $ {MODULE_NAME} .so : динамический модуль или общий объект с именем, которому в имени модуля предшествует подчеркивание , в нашем примере _example.so , который содержит фактический C скомпилированный код
- $ {MODULE_NAME} .py : который является оберткой над предыдущим; example.py - это модуль "точка входа"
A Python динамический модуль должен реализовывать init * функция, как описано в [Python 2]: таблица методов модуля и функция инициализации и другие: что следует после части init , должен соответствовать имени модуля ( .so ) (в нашем случае это init_example ).
При присвоении имени динамическому модулю example.so , когда Python пытался загрузить его, он искал initexample , который (очевидно) не существовал, вызывая ImportError .
Изменение имени модуля на _example.so (gcc -shared example.o example_wrap.o -o _example.so
), поскольку URL также указывает, больше не вызывает исключение.
Затем функции доступны следующим образом:
>>> import example # This imports example.py which automatically imports _example.so
>>> example.fact(4), example.my_mod(7, 2), example.get_time()