私は、成熟したいくつかのPythonライブラリに、ほとんどのアーキテクチャ(Win32/Win-amd64/MacOS)とPythonのバージョン用にプリコンパイルされたバージョンがあることに気付きました。さまざまな環境で拡張機能をクロスコンパイルする標準的な方法は何ですか?ワイン?仮想マシン?クラウドソーシング?PythonのさまざまなOS /バージョンのPython C/C++拡張をどのようにコンパイルしますか?
答えて
SWIGは、マルチプラットフォームコード生成のためのパスを提供します。
申し訳ありませんが、私はそれについて明確ではありませんでした。問題は、コードの開発ではなく、実際のコンパイルに関することです。 – golobor
私のPython拡張モジュールはすべてC言語であり、C言語ではないので、Pythonを使用します。私は、異なるオペレーティングシステムをサポートする必要があるときにも仮想マシンを使用します。 Boostのbjamビルドドライバでは、さまざまなバージョンのPython(2.6,2.7)異なるバージョンのg ++やさまざまなものをビルドすることができます。私が普及している拡張モジュールを持っていて、私が持っていないプラットフォームでそれを使いたい人がたくさんいたら、さまざまなPythonのバージョンなどにいくつかの異なる例を使用してbjamを使用すると、それらを起動させるには十分です。これがうまくいけば、他の人がそれらを使うことができるようにビルドに貢献するように彼らに依頼することができます(もちろんあなたがサポートしていません)。
仮想マシンとHudsonサーバーを使用します。
私たちがサポートする各アーキテクチャには仮想マシンがあります(一般的にコンパイルすると、割り当てられたリソースが伸びないため、VMは問題ありません)。私は、それぞれのVMの設定をPuppetやChefのようなもので管理して、それが適切なビルド環境であることを確認できたと思います。ハードウェアを持っている場合はもちろん、実際のマシンを使用することはできますが、実際に使用しているマシン(デベロッパー・ワークステーションなど)は使用しないでください。
次に、ハドソンでマルチ構成プロジェクトを使用してビルドマトリックスをセットアップします。ビルド・マトリックスは、複数のアーキテクチャー上で複数のPythonバージョンを(ワン・クリックで)ビルドすることができますが、理論上は、あなたがマトリクスに設定できるあらゆる組み合わせを構築することができます。もちろん、代わりにジェンキンスを使うことができます。
あなたのターゲットの1つがosXならば、VMの方法は "半"違法かもしれないと推測します:)まだVMの方法がおそらく最善の方法です。 – ashwoods
OSXは今や仮想化を許可しています:http://www.macworld.com/article/1163755/vmware_fusion_update_lets_users_virtualize_leopard_snow_leopard.html – hbar
私たちは実際に仮想化されたサーバではなくOSX専用の小さなMacミニファームを使用しています - 申し訳ありませんが、それは元の答えです。特にeBayから購入する場合、これらは私たちが必要とするほど安く、機械室の角に積み重ねられます。しかし、バーが言うように、これらを仮想化することも現在法的な選択肢です。 –
- 1. Pythonでどのように拡張ローダーを作成しますか?
- 2. ビルドアプリ、それはOS Xのさまざまなバージョンに
- 3. MingwでPython 3.5コードをどのようにコンパイルしますか?
- 4. pythonのさまざまなタイムアウトhttplib
- 5. Pythonでさまざまな数のカラムを持つMySQLテーブルにどのように挿入できますか?
- 6. VC2010でPython拡張をコンパイルする
- 7. スマートフォンのさまざまなブルートゥースサービスをPythonでどのように使用するのですか?
- 8. FOSUserBundleのユーザーエンティティはどのように拡張されますか?
- 9. XMPPのインストールをどのように拡張しますか?
- 10. ホバーイベントのjScrollPaneをどのように拡張しますか?
- 11. この表現をどのように拡張しますか?
- 12. Pythonのさまざまな入力からのリアルタイムサウンドシンセサイザ
- 13. プロトタイプはタイプスクリプトでどのように拡張されますか?
- 14. チャンネルをどのように拡張しますか?
- 15. Prototypeはどのようにオブジェクトを拡張しますか?
- 16. さまざまなニュースソースをどのようにデータマイニングしますか?
- 17. Python 3.2のSQLAlchemy:C拡張はサポートされていませんか?
- 18. パリンドロームをテストするさまざまな方法のパフォーマンス[Python]
- 19. OSはどのようにコンパイルされたバイナリファイルを実行しますか?
- 20. Pythonの拡張スライス?
- 21. どのようなJavaクラスを拡張できますか?
- 22. PythonのC拡張 - Py_BuildValue()メモリリークの問題を返します
- 23. 特定のバージョンのPythonを拡張する(Linux Ubuntu/Unity)
- 24. コンパイルされたプログラムはどのようにOSと対話しますか?
- 25. 同じプロパティを持つさまざまなタイプの一般的な拡張メソッド
- 26. Python:拡張機能のインポートに失敗しました - Errno 2
- 27. さまざまなバージョンのiOS用にアプリアイコンを作成するにはどうすればよいですか?
- 28. このコードをさまざまなウィンドウサイズに拡大するにはどうすればよいですか?
- 29. Android WebViewのテキストは、さまざまな画面とOSバージョンのためにズームします
- 30. さまざまなタイプのデータを連結するPythonのベストプラクティスですか?
[公式のPythonのドキュメント](http://docs.python.org/distutils/builtdist.html)にいくつかの限定された情報があります。 –
ありがとうございますが、これは質問に部分的にしか答えません。 – golobor
私は[Christoph Gohlke](http://www.lfd.uci.edu/~gohlke/)がこの質問に答えることができたと思います。私はそれに注意を向けた。 –