我正在开发一个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
库(为我解决了这个问题。
希望这有帮助!
安德烈斯