Ho notato che diverse librerie Python mature hanno versioni precompilate per la maggior parte delle architetture (Win32/Win-amd64/MacOS) e versioni di Python. Qual è il modo standard per compilare in modo incrociato le estensioni per ambienti diversi? Vino? Macchine virtuali? Folla di sourcing?Come si compongono le estensioni Python C/C++ per diversi SO/versioni di Python?
risposta
SWIG fornisce un percorso per la generazione di codice multipiattaforma.
Scusa, non ne ero a conoscenza. La domanda riguarda la compilazione effettiva, non lo sviluppo del codice. – golobor
Tutti i miei moduli di estensione Python sono C++, non C, quindi uso boost Python. Uso anche le macchine virtuali quando devo supportare diversi sistemi operativi. Il driver build di bjam di Boost ti permette di creare versioni differenti di Python (2.6, 2.7) con diverse versioni di g ++ e varie altre cose. Se avessi un modulo di estensione che era molto popolare e molte persone volevano usarlo su piattaforme che non ho, allora mi assicurerei solo che il mio codice fosse molto portatile (dovrebbe essere comunque) e fornire istruzioni su come lo costruisco con bjam utilizzando diversi esempi per diverse versioni di Python, ecc. Questo sarebbe sufficiente per farli iniziare. Se funziona, potresti chiedere loro di contribuire con le loro ricostruzioni in modo che altri possano usarle (ovviamente non supportato da te).
Utilizziamo macchine virtuali e un server Hudson.
Abbiamo una macchina virtuale per ogni architettura che supportiamo (generalmente la compilazione non allunga le risorse assegnate a loro, quindi una VM va bene). Immagino che la configurazione di ogni VM possa essere gestita da qualcosa come Puppet o Chef per garantire che sia un ambiente di costruzione adatto. Ovviamente potresti usare macchine reali se hai l'hardware, ma vorrai evitare di usare macchine che le persone stanno effettivamente utilizzando (ad esempio le workstation degli sviluppatori).
Quindi utilizziamo un progetto di configurazione multipla in Hudson per configurare una matrice di build. La matrice di costruzione ci consente di (con un solo clic) di creare più versioni python, su più architetture, ma in teoria è possibile creare tutte le combinazioni che è possibile configurare nella matrice. Ovviamente potresti usare invece Jenkins.
indovina il modo vm potrebbe essere "semi" illegale se uno dei tuoi target è osX :) sembra ancora che il modo VM sia probabilmente il modo migliore per andare. – ashwoods
OSX ha consentito la virtualizzazione per un po 'di tempo: http://www.macworld.com/article/1163755/vmware_fusion_update_lets_users_virtualize_leopard_snow_leopard.html – hbar
In realtà utilizziamo una piccola mac mini farm specifica per OSX anziché per server virtualizzati - mi spiace, dovrei aver chiarito quello nella risposta originale. Soprattutto quando si acquista da ebay, questi sono abbastanza economici per quello che ci serve e sono semplicemente accatastati in un angolo della sala macchine. Ma come dice hbar, anche la virtualizzazione di questi è un'opzione legale. –
È possibile trovare alcune informazioni limitate su questo [nei documenti Python ufficiali] (http://docs.python.org/distutils/builtdist.html). –
Grazie, ma questo risponde alla domanda solo parzialmente. – golobor
Penso che [Christoph Gohlke] (http://www.lfd.uci.edu/~gohlke/) potrebbe rispondere a questa domanda. Ho portato la sua attenzione su di esso. –