Domanda

Sono appena passato da Python 2.6.1 alla 2.6.4 sulla mia macchina di sviluppo e all'avvio di uno script python è stato presentato con il seguente messaggio:

  

Non è possibile estrarre il file (s) per l'uovo di cache

     

Il seguente errore durante   cercando di estrarre il file (s) al   cache di uovo Python:

     

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

     

La directory della cache uovo Python è   attualmente fissato a:

     

/var/www/.python-eggs

     

Forse il vostro account non dispone   l'accesso in scrittura a questa directory? voi   può cambiare la directory di cache   l'impostazione della PYTHON_EGG_CACHE   variabile di ambiente che punta alla   directory accessibile.

non è nulla nel pitone docs così sono a un po 'di una perdita per quanto riguarda le migliori pratiche su dove mettere questa directory e che cosa ha usato per.

Qualcuno può spiegare che cosa la cache uovo Python è?

Inoltre, si può spiegare perché / come è diverso alla directory site-packages usi Python per Conservare le uova (se ho capito bene)?

È stato utile?

Soluzione

Da mie indagini si scopre che alcune uova sono confezionati come zip file, e vengono salvati come tali nella directory site-packages di Python.

Queste uova zip devono essere decompressi prima che possano essere eseguiti, in modo vengono espansi 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 quando si cerca di eseguire le applicazioni.

Ci sono una serie di correzioni:

  1. Creare una directory .python-eggs nella directory home dell'utente e renderlo scrivibile per l'utente.
  2. Creare una directory globale per la decompressione (ad es. /tmp/python-eggs) e impostare la variabile d'ambiente PYTHON_EGG_CACHE a questa directory.
  3. Usa l'interruttore -Z quando si utilizza easy_install per decomprimere il pacchetto durante l'installazione.

Altri suggerimenti

La cache pitone uovo è semplicemente una directory usata da setuptools ai pacchetti istallati conformi alla specifica href="http://peak.telecommunity.com/DevCenter/EggFormats" uovo . È possibile saperne di più setuptools qui .

Inoltre, come afferma il messaggio di errore, è possibile specificare una diversa directory della cache di uova nell'ambiente impostando PYTHON_EGG_CACHE = / some / altro / dir. Il modo più semplice per farlo è quello di impostare nel vostro ~ / .bash_profile (supponendo che si sta usando bash), in questo modo:

export PYTHON_EGG_CACHE=/some/other/dir

Potrebbe essere necessario impostare nel proprio ambiente Apache se si sta utilizzando un'applicazione Web.

Questo è un oscuro effetto collaterale di utilizzare altrimenti bel meccanismo di uova.

Le uova sono pacchetti (un elenco completo di file) confezionato in un unico file .egg a depolyment semplificare.

sono memorizzati in /site-packages/ dir.

Fino a quando i file memorizzati nell'uovo sono file .py funziona benissimo. Python importazione può importare le cose da qualsiasi file come oggetto proprio come lo era un file ordinario.

Ma quando qualcosa di simile accade .so a cadere in là, pitone non può spiegare al sistema operativo sottostante che vuole caricare una libreria che non ha un nome fisico. E le Distutils unica soluzione autori hanno pensato si decomprimere in una directory temporanea. Naturalmente non è /site-packages/ poiché /site-packages/ non è scrivibile per gli utenti comuni.

Quindi è possibile

  • PYTHON_EGG_DIR insieme a /tmp, o

  • utente danno il permesso di scrittura per www /var/www/.python-eggs
    (In modo che i file non vengono decompressi ogni volta / tmp viene ripulito) o meglio allora

  • decomprimere l'uovo come suggerito da @ shalley303
    (Ed evitare decompressione delle uova nella fase di esecuzione del tutto).

uova

Python sono zip-compressi pacchetti contenenti entrambi i moduli Python e metadati. La cache uovo è dove il contenuto estratto di dell'uovo sono memorizzati in modo che i moduli Python contenuti all'interno sono utilizzabili.

Si può anche disabilitare l'uso della .egg dopo che è stato installato. Hai bisogno di andare nella directory site-packages, estrarre il .egg, e poi spostarlo in un file nascosto (o eliminarlo, o qualsiasi altra cosa).

Ecco un esempio di quello che ho fatto per disattivare il file .egg modulo MySQLdb che stava causando questo errore quando lo script python è stato 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

diritto di Phillip B Oldham. È possibile aggiungere queste righe nel codice:

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

Una soluzione semplice sarebbe quello di creare la directory e fornire l'accesso www-data ad esso.

$ mkdir /var/www/.python-eggs
$ chown www-data:www-data /var/www/.python-eggs
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top