[Python] Python C API Creare delle variabili

Alessandro Agosto the.6one6 a gmail.com
Mar 12 Gen 2010 16:05:07 CET


Il giorno 12 gennaio 2010 04.32, Daniele Varrazzo <piro a develer.com> ha
scritto:

Oddio... un pelino masochistico! Non è meglio lasciar fare il refcount a
> qualcosa tipo pyrex?

ma LOL. Beh il mio intento è anche quello di studiarmi le API e credo che
usandole direttamente nel C sia il modo migliore, anche perchè ho in mente
un paio di moduli in cui dovrei usare delle librerie in C, diciamo che le
scuse per questa scelta non mancano :p certo che poi la soluzione da te
proposta è migliore quando è, ad esempio, per lavoro, ma non è questo il mio
caso -non ancora-.

> La documentazione di PyModule_AddObject sembra suggerire che devi
> passargli il risultato della funzione Py_InitModule [1] o analoghe. Questo
> va fatto nella funzione di inizializzazione del modulo (initpymod nel tuo
> caso).
>
Ah ecco, io pensavo dovessi proprio usare PyModule_New, ho invece fatto come
dici tu, salvando il riferimento della Py_InitModule() e provando con quello
e funziona tutto alla perfezione :)

> Io comunque non ho mai usato PyModule_AddObject: per un esempio puoi
> vedere questo semplice (2 funzioni e una costante stringa) modulo di
> estensione [2]: il codice della initXXX() usa:
>
> - Py_InitModule4 per creare il modulo
> - PyModule_GetDict per ottenere il dizionario del modulo
> - PyDict_SetItemString per aggiungere oggetti al dizionario del modulo.
>
Uhm, è bene tenerlo a mente :) nel mio caso comunque và benissimo
PyModule_AddObject, in quanto devo solo rendere disponibile come variabile
un dizionario con dei valori predefiniti per un utilizzo rapido del modulo.

> Lo scheletro di questo modulo l'ho creato usando un tool mezzo abbandonato
> che si trova nella distribuzione sorgente di Python: Tools/modulator. Ha un
> po' di bit rot ma ce l'ha fatta a produrre uno scheletro che poi ho finito
> a mano.
>
Darò una occhiata anche a questo, ma se già dici che è mezzo abbandonato...
le alternative non mancano e poi, sinceramente, il modulo in questione l'ho
scritto da zero e ho ottenuto subito qualcosa di funzionante per alcuni
test.

>
> Comunque appena serve qualcosa un pelino più complessa ti sconsiglio di
> procedere a mano con l'API C nuda e cruda e ti consiglio invece
> Pyrex/Cython.
>
> [1] http://docs.python.org/c-api/allocation.html#Py_InitModule
> [2]
> http://code.google.com/p/py-setproctitle/source/browse/src/setproctitle.c
>
Già, credo proprio che darò un occhio a Pyrex, l'avevo già fatto ma mai
seriamente e soprattutto senza mai usarlo.

Grazie ancora per il tuo aiuto, sei stato molto prezioso :)
-- 
Alessandro A.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100112/92121f16/attachment.htm 


Maggiori informazioni sulla lista Python