Я пытаюсь построить расширение python. Я создаю простую библиотеку, которая экспортирует одну функцию. Это всего лишь один файл - testlib.c, который реализует функцию под названием apicall. Затем я создаю SWIG интерфейс файла:Не удается импортировать модуль, созданный с помощью SWIG
%module testlibpy
void apicall(const char* message);
Затем я использую эту команду для создания интерфейса: swig -python -py3 -modern testlibpy.i
Мой setup.py выглядит следующим образом:
from distutils.core import setup, Extension
example_module = Extension('_testlibpy',
sources=['testlibpy_wrap.c', 'testlib.c'],)
setup (name = 'testlibpy',
version = '0.1',
author = "SWIG Docs",
description = """Simple swig example from docs""",
ext_modules = [example_module],
py_modules = ["testlibpy"],
)
Я строю расширение с помощью команды : python3.4 ./setup.py build_ext --inplace
. Все работает нормально. Когда я пытаюсь импортировать мое новое расширение от python3.4 командной строки, я получить следующее сообщение об ошибке:
Python 3.4.2 (default, Feb 18 2015, 04:50:08)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import testlibpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../sandbox/swigtest/testlibpy.py", line 24, in <module>
_testlibpy = swig_import_helper()
File ".../sandbox/swigtest/testlibpy.py", line 20, in swig_import_helper
_mod = imp.load_module('_testlibpy', fp, pathname, description)
File ".../swt/install/python-3.4.2/lib/python3.4/imp.py", line 243, in load_module
return load_dynamic(name, filename, file)
ImportError: .../sandbox/swigtest/_testlibpy.cpython-34m.so: undefined symbol: PyCObject_FromVoidPtr
>>>
Все отлично работает для других версий Python - 2.7 и 3.0. Версия SWIG 1.3.40
Какая версия SWIG вы используете? –
Я использую 1.3.40. На другой машине с swig 2.0 все работает неплохо. – Lazin