Risposte:
Le applicazioni Python ben impacchettate vengono compilate in .pyc
file in uno script eseguito dopo l' installazione dei file. Ciò è necessario in base alle linee guida per il packaging per essere in grado di adottare l'installazione Python che stai utilizzando in quel momento. Ricorda che i .pyc
file sono molto specifici per il tuo sistema (versione e dipendenze di Python).
Tutti .pyo
e .pyc
file sono quindi espressamente esclusi nei pacchetti e contrassegnati come errori da Lintian :
I file sorgente Python compilati non devono essere inclusi nel pacchetto. Questi file devono essere rimossi dal pacchetto e creati al momento dell'installazione del pacchetto nel postinst.
Fare riferimento alla sezione 2.6 ( Moduli Byte-Compilation ) di Debian Python Policy per i dettagli.
Gravità: grave, Certezza: certo
Nel caso di python-numpy
questa compilazione di byte post-installazione è gestita dall'hook debycper di pycentral. Dopo l'installazione appare così:
ls -l /usr/lib/python2.7/dist-packages/numpy
lrwxrwxrwx 1 root root 47 Mar 20 2012 add_newdocs.py -> ../../../../share/pyshared/numpy/add_newdocs.py
-rw-r--r-- 1 root root 251912 Aug 6 22:06 add_newdocs.pyc
Il motivo per cui questi .pyc
/ .pyo
file non vengono compilati in fase di esecuzione durante il primo avvio dell'applicazione come previsto è il seguente.
I file Python sono installati in una directory a livello di sistema, disponibile per tutti gli utenti sul sistema. Ogni volta che un utente avvia l'applicazione, l'interprete Python può leggere i .py
file, ma non può scrivere nelle directory (ad es /usr/lib/python2.7/dist-packages/
.). Questo fa parte della sicurezza generale in tutti i sistemi Linux; gli utenti non dovrebbero scrivere /usr
, solo con i diritti di root questo dovrebbe essere possibile. Per questo motivo, gli hook APT compileranno i file Python per te al momento dell'installazione; in primo luogo per ridurre al minimo le dimensioni del pacchetto, in secondo luogo per essere in grado di riattivare gli hook una volta che qualcosa cambia sul sistema in merito a Python, perché è necessario ricompilare quando diventano incompatibili durante gli aggiornamenti, ad esempio.
Ciò, tuttavia, non influisce sui normali file Python di proprietà dell'utente che vengono compilati in fase di esecuzione.
/usr/lib/python2.7/dist-packages/numpy
, ci sono dei pyc
file. Ricordo di aver guardato lì su installazioni Seveal - e c'erano solo semplici file PY. Quindi in un certo senso "non riesco a riprodurre il bug".
.pyc
non ci sarebbe ancora è che il pacchetto non è stato installato completamente. Dopo aver disimballato ci sono altri passi da fare. IIRC l'hook python-central viene eseguito solo dopo l'installazione di tutti i pacchetti. Quindi, in una sessione APT in esecuzione o interrotta durante l'installazione del pacchetto, l'osservazione che hai descritto può essere fatta probabilmente.
/usr/share/pyshared/
scrivibile a me stesso, al fine di consentire a Python di compilare i file al primo avvio.