On Tue, Mar 24, 2009 at 5:05 AM, CinnamonDonkey <cinnamondon...@googlemail.com> wrote: > Thanx Max - your explanation sorted it :-), and a big thank you to > everyone else also! > > >From the various posts, Python considers any directory containing the > __init__.py file to be a package. The top level package is the highest > directory (closest to root) with a __init__.py file. > > Inter-package communication is not allowed unless the packages > themselves are contained by a parent package. > > How does this relate to the site-packages folder? Is it a top level > package for all installed packages? > > Let's say I have installed the "Trac" system which uses "Genshi", they > are both packages. They are also both installed at the same level and > I know "Trac" uses "Genshi" to work. \Python25\Lib\site-packages does > not contain a __init__.py file so it is not a package (i.e. not a > parent package to "Trac" and "Genshi") :0.
Trac does not use relative imports to access genshi. When relative imports are not used, python goes through sys.path list to find modules (with a small exception made when absolute_imports are not enabled, but that should be default in 2.7). The site-packages directory is added to sys.path, so when trac executes something like "from genshi import some_module", python will look in site-packages, among other directories, for a directory called "genshi" that contains an __init__.py file. When you execute a script, the directory of that script is automatically added to sys.path, so with your example you could have used absolute imports between subpack1 and subpack2, with the \App directory performing the same function as site-packages (Gabriel's suggestion). This is for your original version of the code when main.py was under App. Once you moved main.py outside of \App, running "import sybpack2" would no longer work. You can, however, append directories to sys.path, so by doing the following in main.py you could again allow non-relative imports between subpack1 and subpack2: import os import sys sys.path.append(os.path.realpath('App')) - Max -- http://mail.python.org/mailman/listinfo/python-list