setting PYTHONPATH

Terry Hancock hancock at anansispaceworks.com
Mon Mar 6 22:01:35 CET 2006


On Sun, 5 Mar 2006 23:05:31 -0800 (PST)
anushya beauty <abbi_0382 at yahoo.com> wrote:
>       Anybody, please help me to set PYTHONPATH to import
>       my modules?. Where is sy.path set?
>   
>   In some python groups site, to import the user modules,
>   they explained  to  create one __init__.py file in my
>   module directory (this file  should include __all__
>   variable, which refer to the modules that the  user
>   wants to import). How to set the __all__ var?

PYTHONPATH
   is an environment variable. You set this however your
   operating system lets you do handle them. In Linux or
   Unix with csh/tcsh, this looks like:

   setenv PYTHONPATH /path/to/python/files

   in bash/sh it looks like:

   set PYTHONPATH=/path/to/python/files

   and I'm sure there's some way to do it in Windows and
   OS X.

sys.path
   means "the name path in the module sys"  So, in order to
   see that, you need to (from python):

>>> import sys
>>> sys.path
>>> sys.path
['', '/usr/lib/python23.zip', '/usr/lib/python2.3',
'/usr/lib/python2.3/plat-linux2', ...]

    As you can see, it's a list.  You can append to it, or
    more likely, prepend the directory you need.

__all__
   is a "magic" variable in the __init__.py (or any
   module) which you can set to define which names will
   be imported when you import from that module:

If module "foo.py" contains:
 
__all__ = ['a', 'b']
a = 1
b = 2
c = 3

then another module which imports from foo will get
a and b, but not c:

>>> from foo import *
>>> a,b
(1, 2)
>>> c
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'c' is not defined

Meanwhile:

__init__.py
     This is how you make a "package" out of a directory of
     python modules. Its namespace is the package-wide
     space. So you can control what modules are loaded with
     explicit commands, or you can leave it empty and then
     you will have to do explicit imports of sub-modules:

spam/
   __init__.py
   ham.py
   eggs.py

     requires explicit imports of ham and eggs modules:

>>> import spam
>>> import spam.ham
>>> import spam.eggs

Although these things are all interesting, they are not
closely related, and you haven't really said what your
problem is, so I don't know which is going to be helpful to
you.




-- 
Terry Hancock (hancock at AnansiSpaceworks.com)
Anansi Spaceworks http://www.AnansiSpaceworks.com




More information about the Python-list mailing list