我注意到幾個成熟的Python庫對於大多數體系結構(Win32/Win-amd64/MacOS)和Python的版本都有預編譯版本。在不同環境下交叉編譯擴展的標準方式是什麼?紅酒?虛擬機?人羣採購?如何爲不同的操作系統/版本的Python編譯Python C/C++擴展?
回答
我所有的Python擴展模塊都是C++,而不是C,所以我使用boost Python。當我需要支持不同的操作系統時,我也使用虛擬機。 Boost的bjam構建驅動程序允許您使用不同版本的Python(2.6,2.7)構建不同版本的g ++和其他各種東西。如果我有一個非常受歡迎的擴展模塊,並且很多人想在我沒有的平臺上使用它,那麼我會確保我的代碼非常便於攜帶(應該是無論如何),並提供關於如何構建它的說明bjam使用了幾個不同的Python版本的例子,等等。這足以讓他們開始。如果這樣做,你可以要求他們回饋他們的構建,以便其他人可以使用它們(當然不支持你)。
我們使用虛擬機和Hudson服務器。我們支持的每個體系結構都有一個虛擬機(通常編譯不會擴展分配給它們的資源,所以虛擬機很好)。我猜想每個虛擬機的配置都可以通過像Puppet或Chef這樣的東西進行管理,以確保它是一個合適的構建環境。如果您擁有硬件,您當然可以使用真機,但您希望避免使用人們實際使用的機器(例如開發人員工作站)。
然後,我們在Hudson中使用多配置項目來設置構建矩陣。構建矩陣允許我們(通過單擊)在多種體系結構上構建多個Python版本,但理論上,您可以構建您可以在矩陣中設置的所有組合。當然,你可以用詹金斯來代替。
如果你的一個目標是osX,那麼猜測vm的方式可能是「半」非法的:)仍然看起來像VM方式可能是最好的方式。 – ashwoods 2012-04-17 12:19:32
OSX已經允許虛擬化一段時間了:http://www.macworld.com/article/1163755/vmware_fusion_update_lets_users_virtualize_leopard_snow_leopard.html – hbar 2012-04-17 21:47:56
我們實際上使用了一個專門用於OSX而不是虛擬化服務器的小型Mac迷你農場 - 抱歉,應該澄清那在原來的答案。特別是從ebay購買時,這些價格足夠便宜,可以滿足我們的要求,而且只是堆放在機房的一個角落。但正如hbar所說,虛擬化這些也是現在合法的選擇。 – 2012-04-18 04:33:58
- 1. 編譯爲不同的python版本
- 2. 如何確定編譯rpm的操作系統版本?
- 3. Python和不同的操作系統
- 4. python中的擴展操作符的非插入版本
- 5. 如何編譯PHP擴展跨版本?
- 6. 如何使python模塊兼容不同的操作系統?
- 7. 如何使用Addon SDK檢測Firefox擴展中的操作系統版本?
- 8. 交叉編譯Python擴展
- 9. 編譯IP2Location Python擴展爲Windows 7
- 10. jQuery - 檢測操作系統和操作系統版本
- 11. JNI。不同的Android操作系統版本之間的不同的行爲
- 12. 爲主要操作系統版本設置最低操作系統版本,同時允許以前的操作系統版本?
- 13. 如何在OSX上爲Python編譯C++擴展(而不是C)?
- 14. 如何更改生成文件中的python版本 - 編譯Multicorn(PostgreSQL FDW擴展)
- 15. 跨不同操作系統的相同瀏覽器版本
- 16. 在不同的操作系統上的樹枝編譯異常
- 17. 如何爲Linux(基本操作系統)安裝Python(x,y)?
- 18. 擴建 - 使用不同的Python版本
- 19. Python:可以用py2exe編譯的腳本凍結操作系統嗎?
- 20. Python CPU和操作系統
- 21. Python操作系統命令
- 22. Python操作系統模塊
- 23. Python的C++擴展編譯器警告
- 24. IE8在不同操作系統版本之間的行爲有所不同嗎?
- 25. 操作系統:編譯器混淆
- 26. 如何使用基於操作系統版本的python來瀏覽目錄?
- 27. 操作系統的編譯時間
- 28. 編譯Liferay的操作系統x 10.6
- 29. 如何在同一操作系統中管理不同版本的node.js?
- 30. 從Firefox擴展檢測操作系統
您可以在[官方Python文檔](http://docs.python.org/distutils/builtdist.html)中找到關於此的一些有限信息。 – 2012-01-04 04:22:37
謝謝,但這只是部分回答了問題。 – golobor 2012-01-04 05:48:07
我認爲[Christoph Gohlke](http://www.lfd.uci.edu/~gohlke/)可以回答這個問題。我把他的注意力引向了它。 – 2012-01-04 14:00:37