I currently do this:

PYTHONPATH=/home/$USER:/home/$USER/respository:/home/$USER/repository/python-stuff

How can I make it so that the PYTHONPATH can include everything subdirectory?

PYTHONPATH = /home/$USER/....and-all-subdirectories
link|improve this question

feedback

2 Answers

up vote 3 down vote accepted

That's not how PYTHONPATH works; PYTHONPATH treats its search path differently from shell PATH. Let's say I do this:

$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py

This will work, in Python (sys.path will include the current directory):

$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)
>>> import a, b   # Works
>>> quit()

However, subdirectories are treated as packages when __init__.py is present in the directory, and are ignored by PYTHONPATH otherwise:

$ mkdir /home/jsmith/python/pkg
$ cd /home/jsmith/python/pkg
$ touch __init__.py c.py d.py
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)
>>> import a, b   # Works
>>> import c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named c

To get at something in that subdirectory, this would work:

>>> from pkg import c   # Works
>>> import pkg.c        # Works

To roll a solution where every subdirectory in your PYTHONPATH is added, you need to explicitly add every folder to PYTHONPATH or sys.path programmatically. This behavior is intentional, and behaves nothing like shell PATH. Given the interpreter's support for packages in this regard, surely there's a better way to accomplish what you're after?

link|improve this answer
Man, I wish each site would check your other accounts before denying you posting privileges. It sucks starting over with rep, especially with things like the one-URL limit...(I had more references for you, OP) – Jed Smith Nov 1 '09 at 1:08
1  
Thanks very much Jed. Appreciate it – Alex Nov 1 '09 at 1:35
@Alex: You're welcome. :) – Jed Smith Nov 1 '09 at 1:40
feedback

That's not how environment PATH variables work - you give it the top-level directory and it's up to the application to recurse the directory tree if it needs to.

link|improve this answer
So, if I have a python file under /home/$USER/myfile.py Can I import this? – Alex Oct 31 '09 at 23:42
Sure, why couldn't you? – ErikA Oct 31 '09 at 23:45
feedback

Your Answer

 
or
required, but never shown

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