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



我已经使用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模块。这个结论正确吗?如果是,采取什么方法来"告诉"SWIG生成与Python版本无关的Python模块?

SWIG最终生成一个Python扩展,该扩展固有地绑定到Python的单个版本(和配置)。

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

当你真正编译代码时,你必须为你的Python指定一个包含路径。

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

参考36.2.3手工编译动态模块

最新更新