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

9

我注意到很多成熟的Python库都有为大多数架构(Win32/Win-amd64/MacOS)和Python版本预编译的版本。那么跨不同环境编译扩展的标准方法是什么?使用Wine?虚拟机?众包?


2
您可以在Python官方文档中找到一些有限的信息。 - Niklas B.
谢谢,但这只部分回答了问题。 - golobor
我觉得Christoph Gohlke可能能回答这个问题。我已经引起了他的注意。 - Piotr Dobrogost
这是关于如何开发跨平台代码还是实际的交叉编译的问题? - Demolishun
抱歉回复晚了。这个问题是关于实际交叉编译的。我看到一些重要的项目(比如Numpy)有几乎每种流行架构的包。所以问题是他们通常是怎么做到的?人们是否拥有安装这些操作系统的物理/虚拟机,或者他们通过众包进行实际编译,或者有一些在线服务进行交叉编译? - golobor
3个回答

8
我们使用虚拟机和Hudson服务器。我们为每种支持的架构都有一个虚拟机(通常编译不会超出分配给它们的资源,因此使用虚拟机即可)。我想每个虚拟机的配置可以由像Puppet或Chef这样的工具来管理,以确保它是一个合适的构建环境。当然,如果你有硬件,你也可以使用真实的机器,但你要避免使用人们正在使用的机器(例如开发者工作站)。
然后,我们在Hudson中使用多配置项目来设置构建矩阵。构建矩阵允许我们(只需单击一次)在多个架构上构建多个Python版本,但理论上您可以构建您在矩阵中设置的任何组合。当然,您也可以使用Jenkins。

猜测使用虚拟机的方式可能是“半”非法的,如果你的目标之一是OSX :) 仍然似乎虚拟机方式可能是最好的选择。 - ashwoods
OSX现在已经允许虚拟化一段时间了:http://www.macworld.com/article/1163755/vmware_fusion_update_lets_users_virtualize_leopard_snow_leopard.html - hbar
我们实际上使用了一个小型的Mac Mini农场,专门用于OSX,而不是虚拟化服务器 - 抱歉,在原始答案中应该澄清这一点。特别是在从eBay购买时,这些设备足够便宜,可以满足我们的需求,并且只是堆放在机房的一个角落里。但正如hbar所说,现在也可以将其虚拟化,这也是一种合法的选择。 - Mark Streatfield

0

SWIG提供了一种多平台代码生成的路径。


抱歉,我没有表述清楚。这个问题是关于实际编译而不是代码开发的。 - golobor

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接