2013-04-17 13 views
5

Se ho ragione, i file di compilazione Python sono multipiattaforma. Quindi, perché la maggior parte delle librerie è stata rilasciata richiedendo una build e l'installazione?Perché le librerie Python non sono fornite come pyc?

È la pigrizia da parte del distributore, o sbaglio nel dire che potrebbero semplicemente distribuire i file pyc? In caso contrario, come distribuire un file di script python con librerie come prerequist senza richiedere all'utente di compilare e installare le librerie?

+5

E, penso che valga la pena notare che l'unico aumento di prestazioni ottieni "compilando" è nell'importazione iniziale. Altrimenti, tutto funziona alla stessa velocità AFAIK. In altre parole, non si noterà una differenza di prestazioni in esecuzione da un 'pyc' o un' py'. – mgilson

risposta

7

Poiché il formato del codice contenuto può cambiare con ogni (principale) versione di Python, mentre il codice sorgente di almeno può essere compatibile con. Il formato può differire tra le implementazioni (di cui ve ne siano diverse, i due più noti sono CPython and PyPy.

Vedi this article per maggiori informazioni circa la struttura interna del file .pyc.

4

Sono piattaforma trasversale, ma non cross-version e non cross-implementation In altre parole, diverse versioni di CPython potrebbero avere problemi con uno stesso file .pyc.

E se si guardano altre implementazioni come PyPy, IronPython, Jython ecc. , non avrai alcuna fortuna con i file .pyc.

Inoltre, i file .pyc corrispondono a un file .py. Ciò che voi (probabilmente) avete in mente sono le librerie che includono una parte scritta in C. Devono essere compilate in file dipendenti dalla piattaforma (.pyd, .dll, .so, ecc.) Per funzionare. Poiché non molti sviluppatori hanno tutte le piattaforme supportate disponibili, la forniscono come sorgente e la lasciano al sistema dell'utente per compilarla.

+0

Nota sull'ultima parte: la distribuzione binaria dei moduli di estensione è la norma su Windows, dove raramente qualcuno ha un compilatore. – delnan

0

Il processo di creazione di un file .pyc da un file .py viene eseguito in modo trasparente dall'interprete. Il motivo per cui alcuni installatori li generano al momento dell'installazione è puramente per evitare che vengano generati la prima volta che viene eseguito lo script, di solito per motivi di velocità, ma anche perché .pyc possa finire in un sistema (non utente -writable) directory. A differenza dei linguaggi compilati, o anche dei moduli Python scritti in C, è non un requisito tecnico che questi file esistano in primo luogo - se lo fosse, non si sarebbe in grado di mettere i propri script direttamente in python e averli eseguire senza un passo di compilazione.

Qualsiasi libreria che richiede rigorosamente una fase di creazione prima dell'installazione ha sicuramente un componente che si compila in codice nativo - che certamente non è multipiattaforma. Per qualsiasi libreria pure-python, è sempre sufficiente posizionare l'albero della directory sorgente del modulo da qualche parte nel tuo PYTHONPATH, dopo averlo copiato direttamente dall'archivio in cui lo hai scaricato.

Problemi correlati