Pregunta

He acaba de actualizar desde Python 2.6.1 a 2.6.4 en mi máquina de desarrollo y al iniciar un script en Python, se presentó con el mensaje siguiente:

  

No se puede extraer el archivo (s) al huevo caché

     

producido el siguiente error mientras   tratando de archivo de extracción (s) a la   Python caché de huevo:

     

[Errno 13] Permiso denegado:   '/Var/www/.python-eggs'

     

El directorio de caché de huevo es Python   Actualmente se establece en:

     

/var/www/.python-eggs

     

Tal vez su cuenta no tiene   acceso de escritura a este directorio? Tú   puede cambiar el directorio de caché   estableciendo el PYTHON_EGG_CACHE   variable de entorno a punto a una   directorio accesible.

No hay nada en el pitón docs por lo estoy en un poco de una pérdida con respecto a las mejores prácticas sobre dónde colocar este directorio y para qué se usa para.

Puede alguien explicar lo que el caché de huevo Python es?

Además, se puede explicar por qué / cómo es diferente al directorio site-packages usos Python para almacenar los huevos (como yo lo entiendo)?

¿Fue útil?

Solución

A partir de mis investigaciones resulta que algunos huevos se empaquetan como archivos zip, y se guardan como tal en el directorio site-packages de Python.

Estos huevos con cremallera necesita ser descomprimido antes de que puedan ser ejecutadas, por lo que se expanden en el directorio PYTHON_EGG_CACHE que por defecto es ~/.python-eggs (que se encuentra en el directorio principal del usuario). Si esto no existe causa problemas al intentar ejecutar aplicaciones.

Hay una serie de correcciones:

  1. Crear un directorio .python-eggs en el directorio personal del usuario y hacer que se puede escribir para el usuario.
  2. Crear un directorio global para descomprimir (por ejemplo. /tmp/python-eggs) y establecer la variable de entorno PYTHON_EGG_CACHE a este directorio.
  3. Utilice el interruptor -Z cuando se utiliza easy_install para descomprimir el paquete durante la instalación.

Otros consejos

La caché de pitón de huevo es simplemente un directorio utilizado por setuptools a almacenar paquetes instalados que se ajustan a la especificación href="http://peak.telecommunity.com/DevCenter/EggFormats" huevo . Puede leer más sobre setuptools aquí .

Además, como dice el mensaje de error, puede especificar un directorio de caché de huevos diferentes en su entorno mediante el establecimiento de PYTHON_EGG_CACHE = / some / / dir otra. La forma más sencilla de hacer esto es para ponerlo en su ~ / .bash_profile (asumiendo que usted está utilizando bash), así:

export PYTHON_EGG_CACHE=/some/other/dir

Es posible que tenga que configurar en el entorno de Apache si está utilizando una aplicación web.

Este es un oscuro efecto secundario del uso de otra manera agradable mecanismo de huevos.

Los huevos son paquetes (un directorio completo de archivos) empaquetado en un archivo .egg a depolyment simplificar.

Se almacenan en dir /site-packages/.

Mientras los archivos almacenados en el huevo son archivos .py funciona muy bien. importación Python puede importar cosas de cualquier tipo fichero objeto al igual que era un archivo normal.

Sin embargo, cuando algo así sucede .so a caer allí, pitón no puede explicar al sistema operativo subyacente que quiere cargar una biblioteca que no tiene un nombre físico. Y los distutils única solución autores han pensado es descomprimirlo en un directorio temporal. Naturalmente, no se /site-packages/ desde /site-packages/ no se puede escribir para los usuarios normales.

Así que puedes

  • conjunto PYTHON_EGG_DIR a /tmp, o

  • usuario dar permiso de escritura a www /var/www/.python-eggs
    (De modo que los archivos no consiguen cada vez descomprimido / tmp se limpia) o mejor después

  • descomprimir el huevo según lo sugerido por @ shalley303
    (Y evitar la descompresión del huevo en el tiempo de ejecución en total).

huevos

Python son comprimido zip-paquetes que contienen ambos módulos de Python y metadatos. La caché de huevo es donde los los contenidos extraídos del huevo se almacenan de modo que los módulos de Python contenidos dentro son utilizables.

También puede desactivar el uso de la .egg después de que se ha instalado. Es necesario entrar en el directorio site-packages, extraer el .egg, y luego moverlo a un archivo oculto (o borrarlo, o lo que sea).

Este es un ejemplo de lo que hice para desactivar el archivo .egg módulo MySQLdb que estaba causando este error cuando la secuencia de comandos de Python se ejecuta desde 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

derecho de Phillip B Oldham. Puede añadir estas líneas en el código:

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

Una solución sencilla sería la de crear el directorio y proporcionar acceso www-data a ella.

$ mkdir /var/www/.python-eggs
$ chown www-data:www-data /var/www/.python-eggs
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top