75 votes

Qu'est-ce que le Python oeuf cache (PYTHON_EGG_CACHE)?

J'ai juste mis à niveau à partir de Python 2.6.1 pour 2.6.4 sur ma machine de développement, et au moment de lancer un script python a été présenté avec le message suivant:

Ne peut pas extraire le fichier(s) d'oeuf cache

L'erreur suivante s'est produite lors essayer d'extraire des fichier(s) à la Python oeuf cache:

[Errno 13] le refus d'une Autorisation: '/var/www/.python-œufs"

Le Python oeuf répertoire de cache est actuellement fixé à:

/var/www/.python-oeufs

Peut-être que votre compte n'a pas l'accès en écriture sur ce répertoire? Vous pouvez changer le répertoire de cache par réglage de la PYTHON_EGG_CACHE variable d'environnement pour pointer vers un répertoire accessible.

Il n'y a rien dans le python docs , donc je suis à un peu de perte à l'égard des meilleures pratiques sur l'endroit où placer ce répertoire et ce qu'elle est utilisée.

Quelqu'un peut m'expliquer ce que le Python oeuf cache?

Aussi, pouvez-vous expliquer pourquoi/comment il est différent de l' site-packages répertoire Python utilise pour stocker les œufs (que je comprends)?

69voto

unpluggd Points 5390

De mes enquêtes, il s'avère que certains oeufs sont emballés sous forme de fichiers zip, et sont enregistrés en tant que tels dans Python site-packages répertoire.

Ces zippé œufs ont besoin d'être décompressé avant d'être exécuté, de sorte que sont développés dans l' PYTHON_EGG_CACHE répertoire par défaut est ~/.python-eggs (situé dans le répertoire home de l'utilisateur). Si cela n'existe pas, il provoque des problèmes lorsque vous essayez d'exécuter des applications.

Il y a un certain nombre de correctifs:

  1. Créer un .python-eggs répertoire dans le répertoire home de l'utilisateur et de le rendre accessible en écriture pour l'utilisateur.
  2. Créer un annuaire global pour la décompression (par exemple. /tmp/python-eggs) et de définir la variable d'environnement PYTHON_EGG_CACHE de ce répertoire.
  3. Utiliser l' -Z de l'interrupteur lors de l'utilisation d' easy_install pour décompresser le package lors de l'installation.

30voto

AJ. Points 12912

Le python oeuf cache est simplement un répertoire utilisé par setuptools pour stocker les paquets installés qui sont conformes à la spécification de l'egg. Vous pouvez en lire plus à propos de setuptools ici.

En outre, comme les états message d'erreur, vous pouvez spécifier un autre œuf répertoire de cache dans votre environnement par la mise en PYTHON_EGG_CACHE=/un/autre/dir. La façon la plus simple de le faire est de le mettre dans votre ~/.bash_profile (en supposant que vous utilisez bash), comme ceci:

export PYTHON_EGG_CACHE=/some/other/dir

Vous pouvez avoir besoin de le mettre dans votre environnement Apache si vous utilisez une application Web.

14voto

Antony Hatchkins Points 5831

C'est un côté sombre-effet de l'aide sinon agréable œufs mécanisme.

Les œufs sont des paquets (un répertoire plein de fichiers) emballés dans un seul .egg le fichier pour simplifier depolyment.

Ils sont stockés dans /site-packages/ dir.

Tant que les fichiers stockés dans l'œuf sont .py des dossiers, il fonctionne très bien. Python import peut importer des choses à partir de n'importe quel fichier-comme l'objet comme si c'était un fichier ordinaire.

Mais quand quelque chose comme .so arrive à tomber là-dedans, python ne peut pas expliquer à l'OS sous-jacent qu'il veut charger une bibliothèque qui n'ont pas un nom physique. Et la seule solution distutils auteurs ont pensé est le décompresser dans un temp dir. Naturellement, il n'est pas /site-packages/ depuis /site-packages/ n'est pas accessible en écriture pour les utilisateurs ordinaires.

Ainsi, vous pouvez

  • ensemble PYTHON_EGG_DIR de /tmp, ou

  • donner à l'utilisateur www de l'autorisation d'écriture pour /var/www/.python-eggs
    (afin que les fichiers n'obtenez pas décompressé tous les temps /tmp est nettoyée) ou mieux alors

  • décompressez l'œuf comme suggéré par @shalley303
    (et éviter la décompression de l'oeuf au moment de l'exécution en tout).

3voto

shalley303 Points 21

Vous pouvez également désactiver l'utilisation de l' .œuf après qu'il a été installé. Vous devez aller dans le site-packages répertoire, extrait de la .l'oeuf, puis le déplacer d'un fichier caché (ou de le supprimer, ou quoi que ce soit).

Voici un exemple de ce que j'ai fait pour désactiver le module MySQLdb .oeuf fichier qui a été à l'origine de ce message d'erreur lorsque le script python a été en cours d'exécution à partir de Zabbix.

cd /usr/local/lib/python2.7/site-packages
décompressez MySQL_python-1.2.3-py2.7-linux-x86_64.oeuf
mv MySQL_python-1.2.3-py2.7-linux-x86_64.l'oeuf .MySQL_python-1.2.3-py2.7-linux-x86_64.oeuf

3voto

Python œufs sont zip compressé de colis contenant à la fois des modules Python et les métadonnées. L'œuf cache est d'où l'on extrait le contenu de l'œuf sont conservés, de sorte que les modules Python qui y sont contenues sont utilisables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X