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