Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

On a Ubuntu (10.10) system, I have a Python package that installs itself into /usr/local/lib/python2.6/site-packages/. This isn't contained in the default path (sys.path). How do I add this directory to the path?

Setting the $PYTHONPATH environment variable is a solution, of course, but I'm looking for a more elegant way to do this. For example easy_install also puts installed packages in it, my sys.path looks something like this:

['', '/usr/local/lib/python2.6/dist-packages/keyring-0.5.1-py2.6.egg', 
'/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk',  
'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', 
'/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', 
'/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', 
'/usr/lib/pymodules/python2.6/gtk-2.0']

so the path is obviously not the default built into the Python binary.

Is there a single config file that contains the entries above? Or in what ways is it possible to modify it?

share|improve this question

3 Answers 3

up vote 11 down vote accepted

The site module documentation and Modifying Python's Search Path seem to be what you're looking for.

As far as I understand it, those entries are being added to sys.path by:

  • /usr/lib/python2.6/site.py
  • /usr/lib/python2.6/dist-packages/site.py
    (Change 2.6 to your version of Python.)
share|improve this answer
1  
thanks, works perfectly :) (I ended up adding a .pth file to /usr/local/python2.6/dist-packages, containing "../site-packages") –  Latanius Feb 18 '11 at 21:40
1  
You can also create a module called sitecustomize.py which site.py tries to import and modify sys.path there. –  TestUser16418 Feb 18 '11 at 22:11

You might create a new file called /etc/profile.d/local_python.sh with the contents

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH

Which will set the PYTHONPATH variable for all logged in users on your system.

share|improve this answer
2  
This really isn't universal. The /etc/profile.d mechanism will only work for login shells for people with shells that use /etc/profile.d (bash/ksh/zsh). I'm sure csh users won't see this change. Also, will be ignored in cron/at jobs. –  Rich Homolka Feb 18 '11 at 21:43
1  
this is a nice way to set global environment variables (yet another thing I learned today), but as I mentioned in the post, I was looking for a more Pythonic way :) –  Latanius Feb 18 '11 at 21:45

For example, if you want to import the suds module which is available as .egg file:

egg_path='/home/shahid/suds_2.4.egg'

sys.path.append(egg_path)

import suds

... rest of code

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.