[Python] Compilare estensioni python per Windows

Pietro Battiston toobaz a email.it
Mer 20 Ago 2008 20:09:52 CEST


Ciao a tutti e buone "vacanze",

sto penando da un po' di tempo per compilare HippoCanvas ([0]) per
Windows. Per la cronaca, è sì considerato obsoleto dai suoi autori ma è
attualmente utilizzato, ad esempio, dalla versione per Linux di Mugshot
(disponibile anche nei repository Ubuntu [1]).

Il sistema di build di questo canvas non è basato su distutils ma sul
classico (per Linux) "./configure; make; make install".

Osservando la versione di Ubuntu noto che il file necessario a fornire a
python il canvas è uno solo: libhippocanvas-1.so.0.0.0, che sta in /usr/lib.

Compilando sotto Windows, mi aspetterei quindi di trovare un bel file
.dll (o .pyd) da mettere in WINDOWS\system o in WINDOWS\system32. Fin
qui dico bene?

Ho fatto un tentativo con mingw32 sotto linux, e la compilazione dopo un
po' che ci smanettavo ha finalmente (apparentemente) funzionato senza
problemi, ma mi sono invece ritrovato un file con estensione ".a" ed uno
con estensione ".la", che ho provato a mettere in posti strategici ma mi
hanno dato tutt'al più degli errori del tipo "questo file non è
un'immagine valida di Windows. Verificare con il dischetto di
installazione." (grafico) e "DLL load failed with error code 193" (nella
shell). Insomma, mi sembra di capire che la compilazione non ha affatto
fatto ciò che mi serve.

Ho quindi provato con cygwin, ma (dopo lunghe fatiche dovute tra l'altro
all'obsolescenza dei pacchetti) il risultato è simile: ottengo due file
"libhippocanvas.a" e "libhippocanvas.la" in /usr/local/lib, e due file
hippo.a e hippo.la in /usr/local/lib/python2.5/site-packages, oltre a
qualche link simbolico. Inutile dire che ho provato a rinominare tutti
questi file con estensione pyd e ad importarli, ma senza successo.

La domanda che vi faccio si svolge quindi "su due piani":
1) sapete come caspita posso ottenere i file che mi servono? Mi sfugge
clamorosamente qualcosa o semplicemente il makefile è linux-specifico e
dovrei andare a modificarlo?
2) potrebbe darsi che in realtà io abbia fatto tutto bene e i messaggi
"questo file non è un'immagine valida" ecc... siano dovuti ad
incompatibilità di compilatore/versione di python usati?
3) vale la pena che io impazzisca su cose del genere o piuttosto
conviene riorganizzare l'estensione "à la distutils" (nonostante io
debba partire, anche in questo campo, praticamente da zero)?

La terza possibilità mi ispira (per il semplice fatto che sulla
compilazione di estensioni con sistema distutils ho trovato tonnellate
di documentazione), ma il fatto è che di distutils so molto poco (l'ho
utilizzato per moduli in python ma mai per estensioni in C), e vorrei
sapere se la migrazione implicherebbe modifiche importanti
all'organizzazione del codice.


ciao e grazie

Pietro

[0]: http://wiki.laptop.org/go/HippoCanvas
[1]: http://packages.ubuntu.com/gutsy/libhippocanvas-1-0


Maggiori informazioni sulla lista Python