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:
- Creare una
.python-eggs
nella directory home dell'utente e renderla scrivibile per l'utente. - Creare una directory globale per la decompressione (ad esempio
/tmp/python-eggs
) e impostare la variabile di ambientePYTHON_EGG_CACHE
su questa directory. - Utilizzare l'
-Z
quando si utilizzaeasy_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