Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the Python egg cache (PYTHON_EGG_CACHE)?

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)?

like image 844
Phillip B Oldham Avatar asked Feb 03 '10 13:02

Phillip B Oldham


People also ask

What are Python eggs?

A "Python egg" is a logical structure embodying the release of a specific version of a Python project, comprising its code, resources, and metadata. There are multiple formats that can be used to physically encode a Python egg, and others can be developed.


1 Answers

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.
like image 111
Phillip B Oldham Avatar answered Oct 05 '22 19:10

Phillip B Oldham