我已经使用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手工编译动态模块