Wie kompilieren Sie Python C / C ++ Erweiterungen für verschiedene OS / Versionen von Python?

8

Ich habe festgestellt, dass einige ausgereifte Python-Bibliotheken vorkompilierte Versionen für die meisten Architekturen (Win32 / Win-amd64 / MacOS) und Versionen von Python haben. Wie können Sie Ihre Erweiterungen standardmäßig für unterschiedliche Umgebungen kompilieren? Wein? Virtuelle Maschinen? Crowdsourcing?

    
golobor 04.01.2012, 04:11
quelle

3 Antworten

7

Wir verwenden virtuelle Maschinen und einen Hudson Server.

Wir haben eine virtuelle Maschine für jede Architektur, die wir unterstützen (im Allgemeinen kompiliert die Kompilierung die ihnen zugewiesenen Ressourcen nicht, also ist eine VM in Ordnung). Ich denke, dass die Konfiguration jeder VM von etwas wie Puppet oder Chef verwaltet werden kann, um sicherzustellen, dass es sich um eine geeignete Build-Umgebung handelt. Sie könnten natürlich echte Maschinen benutzen, wenn Sie die Hardware haben, aber Sie sollten vermeiden, Maschinen zu benutzen, die Leute tatsächlich benutzen (zum Beispiel Entwicklerarbeitsplätze).

Wir verwenden dann ein Multi-Konfigurationsprojekt in Hudson, um eine Build-Matrix einzurichten. Die Build-Matrix ermöglicht uns (mit einem einzigen Klick) mehrere Python-Versionen auf mehreren Architekturen zu erstellen, aber theoretisch können Sie jede beliebige Kombination erstellen, die Sie in Ihrer Matrix einrichten können. Natürlich könntest du stattdessen Jenkins verwenden.

    
Mark Streatfield 12.04.2012 23:59
quelle
0

SWIG bietet einen Pfad für die Multiplattform-Codegenerierung.

    
Demolishun 09.01.2012 07:48
quelle
0

Alle meine Python-Erweiterungsmodule sind C ++, nicht C, also verwende ich Boost Python. Ich benutze auch virtuelle Maschinen, wenn ich verschiedene Betriebssysteme unterstützen muss. Boosts bjam build-Treiber ermöglicht es Ihnen, mit verschiedenen Versionen von Python (2.6, 2.7) verschiedene Versionen von g ++ und verschiedene andere Dinge zu erstellen. Wenn ich ein Erweiterungsmodul hatte, das sehr populär war und viele Leute es auf Plattformen verwenden wollten, die ich nicht hatte, dann würde ich nur sicherstellen, dass mein Code sehr portabel war (es sollte sowieso sein) und Anweisungen geben, wie ich es erstelle mit bjam mit mehreren verschiedenen Beispielen für verschiedene Python-Versionen, etc. Das wäre genug, um sie zu starten. Wenn dies funktioniert, können Sie sie bitten, ihre Builds zurückzugeben, damit andere sie verwenden können (natürlich nicht von Ihnen unterstützt).

    
01100110 11.04.2012 11:47
quelle