python - 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
解决方案
使用库创建 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
库编译)为我解决了这个问题。
希望这可以帮助!
安德烈斯
推荐阅读
- java - intellij,java中未读取命令行参数?
- c# - 随机概率计算不准确
- google-vision - 谷歌视觉 OCR api 没有返回响应
- markdown - Markdown:如何创建有序列表?
- node.js - NodeJs错误:将标头发送到客户端后无法呈现标头从不同功能发送响应时?
- java - 如何为 JMenu 按钮添加边框
- python - 使用opencv、tensorflow和python进行人体检测
- wso2 - 如何解决 WSO2 中的 Thrift 身份验证异常(用户名或密码错误)
- python - 使用 argparse 用换行符解析文本
- node.js - 在保存之前获取文件名