Модуль Python и несколько установок Python-Dev - PullRequest
0 голосов
/ 05 июля 2018

Я занимаюсь разработкой модуля Python и имею разные пакеты разработчика Python, Python 2.7, 3.4 и т. Д. Этот модуль Python скомпилирован из исходного кода C. Я настроил токсины для тестирования с python2.7 и python3.4. Как это:

[tox]
envlist = py27,py34

[testenv]
basepython =
    py27: python2.7
    py34: python3.4

Тесты в 2.7 в порядке, но в 3.4 я получаю эту ошибку: неопределенный символ: PyInstance_Type Также важно, чтобы исходный код на языке C был сгенерирован Swig. И ошибка происходит из py-файла, сгенерированного Swig тоже. Это код файла Python:

from sys import version_info as _swig_python_version_info
if _swig_python_version_info >= (2, 7, 0):
    def swig_import_helper():
        import importlib
        pkg = __name__.rpartition('.')[0]
        mname = '.'.join((pkg, '_mymod')).lstrip('.')
        try:
            return importlib.import_module(mname)
        except ImportError:
            return importlib.import_module('_mymod')
    _mymod = swig_import_helper()
    del swig_import_helper

1 Ответ

0 голосов
/ 04 декабря 2018

Я получаю эту ошибку при создании модуля SWIG с использованием библиотек Python2.x, а затем при попытке импортировать его с помощью Python3. Например, что-то вроде этого (проверено в Ubuntu 17):

swig -Wall -c++ -python example.i
g++ -std=c++11 -shared -o _example.so -fPIC example_wrap.cxx -L ./lib -lfoo -I ./include  -I/usr/include/python2.7 -Xlinker -rpath ./lib
python3 -c "import example"

Запустит следующее ImportError: _example.so: undefined symbol: PyInstance_Type

Обратите внимание на несоответствие между -I/usr/include/python2.7 и последующим запуском с Python3. Импорт из Python2 (или компиляция для нужной библиотеки python3.x) решил ее для меня .

Надеюсь, это поможет!
Andres

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...