[PIPython] Re: prendere confidenza con il pacchetto ActivePython

Alex Martelli aleaxit
Ven 19 Nov 2004 15:16:41 CET


On Thursday 05 February 2004 03:24 pm, Antonio wrote:
> Alex, ti ringrazio per la istantanea risposta, e se non ti dispiace, ne
> richiedo un'altra per chiarire alcune cose. So che per uno che inizia
> adesso sono domande da porsi lontano nel tempo, ma avere CHIARE le IDEE ora
> mi agevolerà non poco, credo.
>
> -- 1 --
> I compilatori distutils :
> cygwinccompiler.py , bcppcompiler.py , ccompiler.py , emxccompiler.py ,
> msvccompiler.py , mwerkscompiler.py , unixccompiler.py :
>
> R: Sono i diversi compilatori supportati da distutils quando si richiede di
> compilare e linkare sorgenti C di un'estensione per Python.  Per usare
> compilatori diversi da quello Microsoft, oltre ovviamente ad averli
> istallati, occorre tipicamente fare operazioni di preparazione perché detti
> altri compilatori non possono tipicamente usare delle DLL ecc scritte
> con/per quelli Microsoft senza passate di preparazione che dipendono dal
> compilatore.  L'ambiente non c'entra, distutils si esegue invece da linea
> comandi."
>
>
> DOMANDA:  Quei compilatori allora si usano solo su codice C per avere
> estensione .pyd per Python. Quei compilatori li ho installati, se posseggo
> quei *.py , giusto? Quale sarebbe il compilatore Microsoft? E quale
> operazione preparatoria dovrei fare per usare ad esempio cygwincompiler?

No, non e` detto che tu abbia istallato tutti i compilatori C che distutils e` 
in grado di supportare; potresti anche non averne nessuno, se piu` avanti ne 
istallerai, distutils comunque e` pronto.  Il compilatore Microsoft e` noto 
come "Visual C++" ed e` supportato da msvccompiler.py per l'uso nelle 
distutils.  

Se usi cygwin, google per:
    
    python cygwin compiler

ti offre molte migliaia di hit con consigli e dettagli su cosa devi fare.  Io 
al momento non uso cygwin, quindi non sono particolarmnte interessato
(uso poco Windows, quando lo uso e devo compilare del C uso comunque
il compilatore Microsoft, che a suo tempo comprai a caro prezzo).


> -- 2 --
> ".py e .pyd :
>
> R: Le estensioni di Python scritte in C, compilate e linkate, hanno
> estensione .pyd (preferibilmente, per identificarle) o .dll (piu`
> generica); Un file .py inteso come modulo da caricare PUO` permettere di
> eseguirlo anche come programma principale (allora eseguirà tipicamente i
> test che lo riguardano) con l'idioma del test su __name__ "
>
> DOMANDA: Per creare un sorgente Python, che sia inteso come modulo o una
> vera e propria applicazione Python, basta usare un qualsiasi editor e
> salvare il file dandogli estensione .py ,giusto?

Giustissimo.  L'estensione .py non e` strettamente necessaria; solo se vuoi
farne import come modulo.  Per i programmi principali puoi usare l'estensione 
di file che preferisci (.py e` la piu` usata, ma vedi anche .pyw per i 
programmi principali che girano con una GUI su Windows, .tap per 
un'applicazione Twisted il cui programma principale e` in Python, ecc, ecc).

> DOMANDA: Per avere una estensione .pyd si scrive Codice C, si salva come
> .py , si compila e si linka con un compilatore C o con un compilatore di
> quelli nominati prima? E' lo stesso compilatore poi a creare il file .pyd ?
> Beh, la risposta è nella tua spiegazione precedente, un compilatore
> distutils. La domanda un po' più intelligente è: come si avvia uno dei
> compilatori distutils e come gli si passa il file da compilare?

No: si scrive codice C che segue le regole della Python C API; si salva come
C; si compila e si linka (magari usando le distutils per comodita`) producendo
alla fine un file di estension .pyd (su Windows).  distutils usa un 
compilatore C (che devi comunque aver opportunamente istallato e
preparato tu) con tutti i flag gia` settati giusti per preparare un .pyd, ma
non e` di per se un compilatore.

Dedico un capitolo intero di "Python in a Nutshell" a spiegare meglio questi
dettagli, quindi non lo ripeto certo qui.  Per un breve riassunto che ho
presentato a vari convegni in passato, vedi (solo in inglese, sorry):

http://www.strakt.com/docs/eup02_Cext_alex.pdf

E` un PDF tratto dalle slide di una presentazione Powerpoint (beh, in realta`
OpenOffice Impress, ma tant'e`, il PDF e` comunque un PDF:-).

Puoi usare anche C++ e vari altri linguaggi per scrivere estensioni a Python,
ma per sfruttarli al meglio ti servono anche altre estensioni, come PyObjC
se vuoi usare Objective C, Boost Python se vuoi usare C++, e cosi` via.  C'e`
anche un linguaggio apposta, chiamato pyrex.  Tutti questi sono download
separati (comunque gratuiti).

Visto che mi pare di capire che non conosci ancora Python, ti raccomando
di rimandare la scrittura di estensioni a quando lo conoscerai molto, MOLTO 
meglio.


> -- 3 --
> "C:\Python23\Lib\compiler sembra contenere le direttive di sintassi,
> identazione...
>
> R: E` un pacchetto alternativo, sperimentale, per compilare Python usando
> Python invece di C.  Interessa solo a utenti molto avanzati in vena di
> sperimentazioni."
>
> DOMANDA: Cosa significa compilare Python usando Python? Parli dei sorgenti
> originali del linguaggio?

Parlo del processo che porta ad esempio da un .py (sorgente) a un .pyc 
(bytecode), sia che il sorgente sia "originale del linguaggio" (beh, delle 
librerie) o meno.  Normalmente questa operazione e` fatta da python.exe (o 
meglio da codice che essa richiama nella python23.dll, comunque codice 
scritto in C).  Il package 'compiler' permette(ra`) di eseguire la 
compilazione da sorgente a bytecode in puro Python, il che e` comodo per 
tanti versi (google per pypy ad esempio) e ti facilita modifiche e 
sperimentalismi vari e assortiti (naturalmente occorre una conoscenza 
esagerata di Python per usare produttivamente queste possibilita` 
avanzatissime).


> -- 4 --
> "con ActivePython si installano contemporaneamente anche delle librerie per
> la scrittura di programmi GUI. La C:\Python23\Lib\lib-tk è il supporto
> Tkinter? Si ha anche qualche altra libreria per le GUI che ancora s'ignora?
>
> R: PythonWin, che supporta le MFC (ovviamente scrivendo GUI usando quelle,
> tali GUI funzioneranno solo su Windows). IDLE è l'IDE standard Python
> disponibile in tutte le piattaforme, usa per la GUI Tkinter. "
>
> Mi pare di capire che gli Ide che posseggo hanno qualche limitazione con le
> interfacce... DOMANDA: quindi dovrei già possedere le MFC sotto
> ActivePython? Ho trovato la cartella
> C:\Python23\Lib\site-packages\Pythonwin\pywin\mfc\ , è questa giusto?

Sono le interfacce a MFC, credo, si`.

> Quindi, se voglio GUI con TKinter devo usare PER FORZA Idle, se invece
> voglio GUI MFC devo usare PER FORZA PythonWin? Per altre GUI, tipo le GTK

No.  I tuoi programmi puoi scriverli con qualsiasi IDE indipendentemente dalla 
GUI che (eventualmente) scegli di usare nei tuoi programmi.  Io personalmente 
uso di solito linea comandi e l'editore di testi "vi" come mio ambiente di 
sviluppo preferito, a volte IDLE (con Tkinter), BlackAdder (con PyQt), o 
MacPython (con Cocoa, su Macintosh), indipendentemente dal fatto che io stia 
scrivendo programmi privi di GUI, con GUI via HTML e browser, con Tkinter, 
con PyQt, o che altro.

> (che conosco un po' avendole usate con PHP-GTK..) che mi sa di non avere
> sotto ActivePython, dopo averle procurate devo avere accortenza particolare
> per l'installazione, ad esempio x farle usare sia a Idle che a
> ActivePython? Python può usare per le GUI anche le API di windows?
> Curiosità: Normalmente le MFC e le API non sono presenti su un pc Windows?

Le IDE useranno le GUI per cui sono scritte, i tuoi programmi useranno le GUI 
che preferisci.  Le API di Windows sono sempre presenti su di un PC Windows 
(vorrei vedere...) e si`, esiste un giocattolo per usarle direttamente da 
Python (qualcosa come "calldll", cercalo con google se ti interessa).  Le MFC 
di solito (non invariabilmente) sono presenti, e PythonWin te le interfaccia.


> P.S.: cliccando su uno o più file .py che mi trovo nelle mie directory
> (cygwinccompiler.py e qualcun altro) mi si è aperta una shell che si è
> chiusa istantaneamente e mi ritrovo con decine di file *.pyc qua e la. Cosa

Cliccando un .py lo esegui (immagino; dipende da che scelte hai fatto durante 
l'istallazione, mi pare che sia il default) e l'esecuzione comporta la 
compilazione di qualsiasi modulo venga importato, quindi la produzione del 
file di bytecode .pyc nello stesso directory contenente il .py del modulo.

> è successo? Mi ritrovo dei file compilati senza sapere come. Se li cancello
> tutti i file .pyc che ho creo qualche problema alla mia installazione
> ActivePython?

No, Python ricompilera` un qualsiasi .py in .pyc, se il .pyc non e` gia`
presente, al momento del bisogno.  L'unico effetto che avrai cancellando i 
.pyc sara` di rallentare le code, forzando Python a ricompilare quel che 
altrimenti si troverebbe gia` fatto sul disco.


> Ringrazio ancora per le risposte che ho già avuto e per quelle che avrò. E

Prego.

> mi scuso per il mio LUNGO scrivere e le numerose domande.

Alcune sono, lo ammetto, piuttosto strane;-).


Alex




More information about the Python mailing list