【发布时间】:2018-12-14 08:54:31
【问题描述】:
我正在开发一个 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
【问题讨论】:
-
setuptools应该自动从您用来运行它的任何 Python 解释器中获取所有内容。如果您使用python3 setup.py install并且python3是您的3.4,那么它将使用3.4 安装;如果您使用~/src/python/bin/python setup.py install并且这是 3.7 的本地版本,那么它将使用该安装等。 -
谢谢。我正在从 tox 安装,它会处理所有事情。我已将 tox 配置为使用 Python 2.7 和 3.4。我在 3.4“未定义符号:PyInstance_Type”中收到此错误。我也设置了 travis,但出现了不同的错误。
-
您应该编辑您的问题以说明您正在使用
tox,以及您如何配置它,以及您要构建什么。这绝对不是setuptools问题。这可能是tox问题。或者可能只是您有一些不兼容 3.x 的 C 扩展模块,并且正试图将 C API 用于旧式类,在这种情况下,修复它的唯一方法是移植该 C自己编写 3.x 代码。 (除非您只是使用该模块的旧版本,并且只需要更新到新版本……)
标签: python python-3.x python-2.7 module