いくつかの成熟した Python ライブラリには、ほとんどのアーキテクチャ (Win32/Win-amd64/MacOS) および Python のバージョン用にコンパイル済みのバージョンがあることに気付きました。さまざまな環境向けに拡張機能をクロスコンパイルする標準的な方法は何ですか? ワイン?仮想マシン? クラウドソーシング?
3 に答える
仮想マシンとHudsonサーバーを使用しています。
サポートするアーキテクチャごとに仮想マシンがあります (通常、コンパイルはそれらに割り当てられたリソースを拡張しないため、VM は問題ありません)。各 VM の構成を Puppet や Chef などで管理して、適切なビルド環境を確保できると思います。もちろん、ハードウェアがあれば実際のマシンを使用することもできますが、人々が実際に使用しているマシン (開発者のワークステーションなど) を使用することは避けたいでしょう。
次に、Hudson でマルチ構成プロジェクトを使用して、ビルド マトリックスをセットアップします。ビルド マトリックスを使用すると、(ワンクリックで) 複数の Python バージョンを複数のアーキテクチャでビルドできますが、理論的には、マトリックスでセットアップできるあらゆる組み合わせをビルドできます。もちろん、代わりに Jenkins を使用することもできます。
私の Python 拡張モジュールはすべて C ではなく C++ であるため、boost Python を使用しています。また、さまざまなオペレーティング システムをサポートする必要がある場合にも、仮想マシンを使用しています。Boost の bjam ビルド ドライバーを使用すると、さまざまなバージョンの Python (2.6、2.7)、さまざまなバージョンの g++、およびその他のさまざまなものでビルドできます。非常に人気のある拡張モジュールがあり、多くの人が私が持っていないプラットフォームでそれを使用したい場合、コードが非常に移植可能であることを確認し (いずれにせよ移植可能であるべきです)、ビルド方法を説明します。さまざまな Python バージョンなどのいくつかの異なる例を使用して bjam を使用します。それらを開始するにはそれで十分です。これが機能する場合は、他の人がそれらを使用できるように、ビルドを提供するように依頼することができます (もちろん、あなたはサポートしていません)。