无法导入具有不同 Python 解释器版本的 SWIG 生成的 Python 包装器

Unable to import SWIG generated Python wrapper with different Python interpreters version

我使用 SWIG 和 Python 2.7 64 位生成了一个 Python 模块。

此 Python 模块可以成功导入(即使用)此 Python 版本,但是当尝试使用不同的 Python 版本导入模块时,假设 3.5 64位,失败了。

相反,当我使用 SWIG 和 Python 3.5 64 位生成相同的 Python 模块时,可以使用此版本成功导入(即使用)它,但不能使用 Python 2.7 64 位。

SWIG 似乎只为生成时使用的那个 Python 版本生成了一个 Python 模块。这个结论正确吗?如果是,那么 "tell" SWIG 生成一个 Python 版本不可知的 Python 模块的方法是什么?

SWIG 最终生成一个 Python 扩展,它本质上与 Python.

的单个版本(和配置)相关联

SWIG 本身只负责生成代码,而不负责构建代码。它生成 C 代码来实现 Python 扩展,以及围绕它的 Python 包装器。 SWIG 生成的这两个输出都应该与版本无关。

然而,当您实际 编译 代码时,您必须将其指向特定版本 Python 的包含路径。

如果您使用 setuptools 构建所有内容,这个多步骤过程对您来说有些隐藏,因为 Python 版本的包含路径 运行 脚本会自动使用。

看看36.2.3 Hand compiling a dynamic module