Python模块和多个python-dev安装

时间:2018-07-05 19:35:09

标签: python python-3.x python-2.7 module

我正在开发一个Python模块,并具有不同的Python开发包,python 2.7、3.4等。 该Python模块是从C源代码编译的。 我设置了tox以测试python2.7和python3.4。 像这样:

[tox]
envlist = py27,py34

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

在2.7中的测试还可以,但是在3.4中,我收到此错误: 未定义符号:PyInstance_Type Swig生成C源代码也很重要。错误也来自Swig生成的py文件。 这是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 :(得分:0)

使用Python2.x库创建SWIG模块,然后尝试使用Python3导入SWIG模块时,出现该错误。例如,做这样的事情(在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库)为我解决了

希望这会有所帮助!
安德烈斯