Qual è la cache dell'uovo Python(PYTHON_EGG_CACHE)?




python-egg-cache (5)

Dalle mie ricerche risulta che alcune uova sono impacchettate come file zip e vengono salvate come tali nella directory dei site-packages del site-packages di Python.

Queste uova zippate devono essere decompresse prima di poter essere eseguite, quindi vengono espanse nella directory PYTHON_EGG_CACHE che per impostazione predefinita è ~/.python-eggs (che si trova nella home directory dell'utente). Se questo non esiste, provoca problemi durante il tentativo di eseguire le applicazioni.

Ci sono un certo numero di correzioni:

  1. Creare una .python-eggs nella directory home dell'utente e renderla scrivibile per l'utente.
  2. Creare una directory globale per la decompressione (ad esempio /tmp/python-eggs ) e impostare la variabile di ambiente PYTHON_EGG_CACHE su questa directory.
  3. Utilizzare l' -Z quando si utilizza easy_install per decomprimere il pacchetto durante l'installazione.

https://code.i-harness.com

Ho appena aggiornato da Python 2.6.1 a 2.6.4 sul mio computer di sviluppo e all'avvio di uno script python è stato presentato il seguente messaggio:

Impossibile estrarre i file nella cache dell'uovo

Si è verificato il seguente errore durante il tentativo di estrarre i file nella cache dell'uovo di Python:

[Errno 13] Autorizzazione negata: '/var/www/.python-eggs'

La directory della cache delle uova Python è attualmente impostata su:

/var/www/.python-eggs

Forse il tuo account non ha accesso in scrittura a questa directory? È possibile modificare la directory della cache impostando la variabile di ambiente PYTHON_EGG_CACHE in modo che punti a una directory accessibile.

Non c'è nulla nei documenti python quindi sono un po 'in perdita per quanto riguarda le best practice su dove mettere questa directory e per cosa è usata.

Qualcuno può spiegare cos'è la cache dell'uovo Python?

Inoltre, puoi spiegare perché / come è diverso dalla directory dei site-packages del site-packages Python usa per memorizzare le uova (come ho capito)?


La cache uovo Python è semplicemente una directory utilizzata da setuptools per archiviare i pacchetti installati conformi alle specifiche delle uova . Puoi leggere ulteriori informazioni su setuptools qui .

Inoltre, come afferma il messaggio di errore, è possibile specificare una directory cache uovo diversa nel proprio ambiente impostando PYTHON_EGG_CACHE = / some / other / dir. Il modo più semplice per farlo è impostarlo nel tuo ~ / .bash_profile (assumendo che tu stia usando bash), come questo:

export PYTHON_EGG_CACHE=/some/other/dir

Potrebbe essere necessario impostarlo nell'ambiente Apache se si sta utilizzando un'applicazione Web.


Phillip B Oldham ha ragione. Puoi aggiungere queste righe nel tuo codice:

import os  
os.environ['PYTHON_EGG_CACHE'] = '/tmp' # a writable directory 

Puoi anche disabilitare l'uso di .egg dopo che è stato installato. Devi andare nella directory dei pacchetti del sito, estrarre il file .egg e quindi spostarlo in un file nascosto (o cancellarlo, o qualsiasi altra cosa).

Ecco un esempio di cosa ho fatto per disabilitare il file .egg MySQLdb che stava causando questo errore quando lo script Python veniva eseguito da Zabbix.

cd /usr/local/lib/python2.7/site-packages
unzip MySQL_python-1.2.3-py2.7-linux-x86_64.egg
mv MySQL_python-1.2.3-py2.7-linux-x86_64.egg .MySQL_python-1.2.3-py2.7-linux-x86_64.egg

Una semplice soluzione sarebbe quella di creare la directory e fornire accesso a www-data .

$ mkdir /var/www/.python-eggs
$ chown www-data:www-data /var/www/.python-eggs




python-egg-cache