如何编译Python C/C++;不同操作系统/Python版本的扩展?

如何编译Python C/C++;不同操作系统/Python版本的扩展?,python,cross-platform,packaging,python-c-extension,Python,Cross Platform,Packaging,Python C Extension,我注意到,一些成熟的Python库已经为大多数体系结构(Win32/Win-amd64/MacOS)和Python版本预编译了版本。为不同环境交叉编译扩展的标准方法是什么?葡萄酒?虚拟机?众包? SWIG为多平台代码生成提供了一条路径。 < P>我所有的Python扩展模块都是C++,不是C,所以我使用Boost Python。当我需要支持不同的操作系统时,我也会使用虚拟机。Boost的bjam构建驱动程序允许您使用不同版本的Python(2.6、2.7)、不同版本的g++和其他各种东西进行构

我注意到,一些成熟的Python库已经为大多数体系结构(Win32/Win-amd64/MacOS)和Python版本预编译了版本。为不同环境交叉编译扩展的标准方法是什么?葡萄酒?虚拟机?众包?

SWIG为多平台代码生成提供了一条路径。

< P>我所有的Python扩展模块都是C++,不是C,所以我使用Boost Python。当我需要支持不同的操作系统时,我也会使用虚拟机。Boost的bjam构建驱动程序允许您使用不同版本的Python(2.6、2.7)、不同版本的g++和其他各种东西进行构建。如果我有一个非常流行的扩展模块,很多人想在我没有的平台上使用它,那么我只需要确保我的代码非常可移植(无论如何应该是),并提供关于如何使用bjam为不同的Python版本使用几个不同的示例构建它的说明,等等,这就足够让他们开始了。如果这样做有效,您可以要求他们重新提交构建,以便其他人可以使用它们(当然您不支持)。

我们使用虚拟机和服务器

对于我们支持的每个体系结构,我们都有一个虚拟机(一般来说,编译不会占用分配给它们的资源,所以VM是可以的)。我想每个VM的配置都可以由Puppet或Chef之类的工具来管理,以确保它是一个合适的构建环境。如果你有硬件,你当然可以使用真正的机器,但是你要避免使用人们实际使用的机器(例如开发人员工作站)


然后,我们使用哈德逊的多配置项目来设置构建矩阵。构建矩阵允许我们(只需单击一下)在多个体系结构上构建多个python版本,但从理论上讲,您可以构建矩阵中可以设置的任何组合。当然你可以用詹金斯来代替

你可以找到一些关于这方面的有限信息。谢谢,但这只回答了部分问题。我想你可以回答这个问题。我让他注意到了这一点。这是一个如何开发跨平台代码的问题还是实际的交叉编译的问题?很抱歉回答得太晚了。问题是关于实际的交叉编译。我看到一些严肃的项目(如Numpy)几乎为每一种流行的架构都提供了一个包。所以问题是他们通常怎么做?人们是否有使用这些操作系统的物理/虚拟机,或者他们拥挤源代码实际编译,或者有一些用于交叉编译的在线服务?对不起,我不清楚。问题在于实际的编译,而不是代码开发。我猜虚拟机的方式可能是“半”的如果您的目标之一是osX,则为非法:)看起来虚拟机方式可能仍然是最好的方式。osX允许虚拟化已经有一段时间了:我们实际上专门为osX使用了一个小型mac mini farm,而不是虚拟化服务器-抱歉,在最初的回答中应该澄清这一点。尤其是在易趣上买的时候,这些东西足够便宜,可以满足我们的需要,而且只是堆放在机房的一个角落里。但正如hbar所说,虚拟化这些功能现在也是一种合法的选择。