Python 模块和多个 python-dev 安装



我正在开发一个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 同样重要的是,C源代码是由Swig生成的。错误也来自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

使用Python2.x库创建 SWIG 模块然后尝试使用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库(为我解决了这个问题

希望这有帮助!
安德烈斯