如何为不同操作系统/版本的 Python 编译 C/C++ 扩展?
我注意到一些成熟的Python库已经为大多数系统架构(比如Win32、Win-amd64和MacOS)以及不同版本的Python准备了预编译的版本。那么,通常有什么标准的方法可以让你的扩展在不同的环境下进行交叉编译呢?是用Wine?虚拟机?还是众包的方式呢?
3 个回答
0
我所有的Python扩展模块都是用C++写的,不是C,所以我使用了boost Python。每当我需要支持不同的操作系统时,我还会使用虚拟机。Boost的bjam构建工具可以让你用不同版本的Python(比如2.6和2.7)、不同版本的g++以及其他各种工具来构建项目。如果我有一个非常受欢迎的扩展模块,很多人想在我没有的平台上使用它,我会确保我的代码非常便于移植(其实本来就应该这样),并提供一些如何用bjam构建的说明,给出不同Python版本的几个例子等等。这样就足够让他们入门了。如果这样做有效,你可以请他们把他们的构建版本分享回来,这样其他人也可以使用(当然这部分不需要你来支持)。
0
SWIG提供了一种方法,可以生成可以在多个平台上运行的代码。
8
我们使用虚拟机和一个Hudson服务器。
我们为每种支持的架构都准备了一台虚拟机(一般来说,编译不会占用太多资源,所以用虚拟机就可以了)。我想每台虚拟机的配置可以通过像Puppet或Chef这样的工具来管理,以确保它们是合适的构建环境。当然,如果你有硬件的话,也可以使用真实的机器,但最好避免使用那些正在被人们实际使用的机器(比如开发者的工作站)。
接下来,我们在Hudson中使用一个多配置项目来设置构建矩阵。构建矩阵让我们可以通过一次点击,构建多个Python版本,支持多种架构。理论上,你可以在矩阵中设置任何组合进行构建。当然,你也可以选择使用Jenkins来完成这个工作。