views:

1711

answers:

3

I've just upgraded from Python 2.6.1 to 2.6.4 on my development machine and upon starting a python script was presented with the following message:

Can't extract file(s) to egg cache

The following error occurred while trying to extract file(s) to the Python egg cache:

[Errno 13] Permission denied: '/var/www/.python-eggs'

The Python egg cache directory is currently set to:

/var/www/.python-eggs

Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory.

There isn't anything in the python docs so I'm at a bit of a loss regarding best-practices on where to put this directory and what it's used for.

Can someone explain what the Python egg cache is?

Also, can you explain why/how it is different to the site-packages directory Python uses to store eggs (as I understand it)?

+6  A: 

The python egg cache is simply a directory used by setuptools to store packages installed that conform to the egg specification. You can read more about setuptools here.

Additionally, as the error message states, you can specify a different egg cache directory in your environment by setting PYTHON_EGG_CACHE=/some/other/dir. The easiest way to do this is to set it in your ~/.bash_profile (assuming you're using bash), like this:

export PYTHON_EGG_CACHE=/some/other/dir

You may need to set it in your Apache environment if you're using a Web application. I answered a similar question here:

http://stackoverflow.com/questions/2148528/how-do-i-change-the-python-egg-cache/2148540#2148540

HTH,

-aj

AJ
+1  A: 

Python eggs are zip-compressed packages containing both Python modules and metadata. The egg cache is where the the extracted contents of the egg are stored so that the Python modules contained within are usable.

Ignacio Vazquez-Abrams
+2  A: 

From my investigations it turns out that some eggs are packaged as zip files, and are saved as such in Python's site-packages directory.

These zipped eggs need to be unzipped before they can be executed, so are expanded into the PYTHON_EGG_CACHE directory which by default is ~/.python-eggs (located in the user's home directory). If this doesn't exist it causes problems when trying to run applications.

There are a number of fixes:

  1. Create a .python-eggs directory in the user's home directory and make it writable for the user.
  2. Create a global directory for unzipping (eg. /tmp/python-eggs) and set the environment variable PYTHON_EGG_CACHE to this directory.
  3. Use the -Z switch when using easy_install to unzip the package when installing.
digitala