Search code examples
pythoneasy-install

python: what happens during easy_install?


I'm a little confused about egg files and installing them using easy_install, hope you can help me with it. (I read about people's recommendation on pip, but I'll like to understand this before I move on).

If I simply copy e,g django_guardian-1.0.2-py2.6.egg from say, a thumbdrive and place in e.g ~/bar/ which PYTHONPATH was pointing to, trying to import the contents via import guardian would yield me importError. This error occur even if I have the easy_install.pth copied in

import sys; sys.__plen = len(sys.path)
./django_guardian-1.0.2-py2.6.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys
'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

Now, using easy_install django-guardian, of course had no such problem.

I navigated to the directory the egg file was easy_installed to, and all it contains was the .pth and the .egg file. I wish to know what other procedures/entries does easy_install makes somewhere that makes the first method unusable....


Solution

  • easy_install uses .pth files to add the .egg files to sys.path -- the list of locations where Python searches for modules to import.

    .pth files are processed by the site module, but only in four pre-defined directories. These directories are platform-specific and based on the sys.prefix and sys.exec_prefix settings. On Unix, the most prominent usually is /usr/lib/pythonXX/site-packages.

    Since your custom directory is not one of the directories processed by site, your .pth file won't get processed and Python won't look inside the .egg.

    For more information, see the site module documentation.