Andrea Crotti wrote: > Ok now it's getting really confusing, I tried a small example to see > what is the real behaviour, > so I created some package namespaces (where the __init__.py declare the > namespace package). > > /home/andrea/test_ns: > total used in directory 12 available 5655372 > drwxr-xr-x 3 andrea andrea 4096 Feb 10 14:46 a.b > drwxr-xr-x 3 andrea andrea 4096 Feb 10 14:46 a.c > -rw-r--r-- 1 andrea andrea 125 Feb 10 14:46 test.py > > /home/andrea/test_ns/a.b: > total 8 > drwxr-xr-x 3 andrea andrea 4096 Feb 10 14:47 a > -rw-r--r-- 1 andrea andrea 56 Feb 10 14:35 __init__.py > > /home/andrea/test_ns/a.b/a: > total 8 > drwxr-xr-x 2 andrea andrea 4096 Feb 10 14:47 b > -rw-r--r-- 1 andrea andrea 56 Feb 10 14:35 __init__.py > > /home/andrea/test_ns/a.b/a/b: > total 12 > -rw-r--r-- 1 andrea andrea 25 Feb 10 14:36 api.py > -rw-r--r-- 1 andrea andrea 153 Feb 10 14:37 api.pyc > -rw-r--r-- 1 andrea andrea 56 Feb 10 14:35 __init__.py > > /home/andrea/test_ns/a.c: > total 8 > drwxr-xr-x 3 andrea andrea 4096 Feb 10 14:47 a > -rw-r--r-- 1 andrea andrea 56 Feb 10 14:35 __init__.py > > /home/andrea/test_ns/a.c/a: > total 8 > drwxr-xr-x 2 andrea andrea 4096 Feb 10 14:47 c > -rw-r--r-- 1 andrea andrea 56 Feb 10 14:35 __init__.py > > /home/andrea/test_ns/a.c/a/c: > total 12 > -rw-r--r-- 1 andrea andrea 20 Feb 10 14:36 api.py > -rw-r--r-- 1 andrea andrea 148 Feb 10 14:38 api.pyc > -rw-r--r-- 1 andrea andrea 56 Feb 10 14:35 __init__.py > > > So this test.py works perfectly: > import sys > sys.path.insert(0, 'a.c') > sys.path.insert(0, 'a.b') > > from a.b import api as api_ab > > from a.c import api as api_ac > > While just mixing the order: > import sys > sys.path.insert(0, 'a.b') > > from a.b import api as api_ab > > sys.path.insert(0, 'a.c') > from a.c import api as api_ac > > Doesn't work anymore > > [andrea@precision test_ns]$ python2 test.py > Traceback (most recent call last): > File "test.py", line 7, in <module> > from a.c import api as api_ac > ImportError: No module named c > > > > Am I missing something/doing something stupid?
The package a will be either a.c/a/ or a.b/a/ depending on whether a.c/ or a.b/ appears first in sys.path. If it's a.c/a, that does not contain a c submodule or subpackage. -- http://mail.python.org/mailman/listinfo/python-list