2016-10-29 1 views
-1

Я создал модуль Python с использованием SWIG и Python 2.7 64 бит.Невозможно импортировать SWIG-сгенерированную оболочку Python с различными интерпретаторами Python версии

Этот модуль Python может быть успешно импортирован (т. Е. Используется) с этой версией Python, но при попытке импортировать модуль с использованием другой версии Python, скажем, 3.5 64 бит, он терпит неудачу.

С другой стороны, когда я создаю один и тот же модуль Python с использованием SWIG и Python 3.5 64 бит, его можно успешно импортировать (например, использовать) с этой версией, но не с Python 2.7 64 бит.

Казалось бы, SWIG генерирует модуль Python только для этой версии Python, который использовался для поколения. Правильно ли это заключение? Если да, каким будет подход, чтобы «рассказать» SWIG о создании модуля Python, который является агностиком версии Python?

+1

1) не имеет отношения к языку C. 2) Почему вы ожидаете, что у двух разных основных версий Python будет такой же ABI? – Olaf

ответ

1

SWIG в конечном итоге создает расширение Python, которое по своей сути связано с одной версией (и конфигурацией) Python.

Сам SWIG несет ответственность только за создание кода, а не за его создание. Он создает как код C для реализации расширения Python, так и оболочку Python. Оба этих выхода, генерируемые SWIG, должны быть несовместимыми с версией.

Когда вы на самом деле компилируете код, однако вы должны указать его на путь включения для вашей конкретной версии Python.

Если вы используете setuptools для создания всего, этот процесс с несколькими шагами несколько скрыт от вас, так как путь включения для версии Python, запускающей сценарий, используется автоматически.

Посмотрите на 36.2.3 Hand compiling a dynamic module

Смежные вопросы