A small module question

Guido van Rossum guido at cnri.reston.va.us
Thu Jun 10 16:31:24 EDT 1999


redhog at lysator.liu.se writes:

> I am having a problem, which is reducible to the following, which I
> would be happy if someone could explain to me:
> 
> [redhog at k35 Python]$ ls -R test/
> test:
> __init__.py  a.py  b.py
> [redhog at k35 Python]$ cat test/__init__.py
> __all__ = ["a", "b"]
> [redhog at k35 Python]$ cat test/a.py
> from test import b
> [redhog at k35 Python]$ cat test/b.py
> from test import a
> [redhog at k35 Python]$ python
> Python 1.5.1 (#1, Mar 21 1999, 22:49:36)  [GCC egcs-2.91.66 19990314/Li
> on linux-i386
> Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
> >>> from test import a
> Traceback (innermost last):
>   File "<stdin>", line 1, in ?
>   File "test/a.py", line 1, in ?
>     from test import b
>   File "test/b.py", line 1, in ?
>     from test import a
> ImportError: cannot import name a
> >>>

The "from test import a" statement ends with referencing test.a while
a isn't completely imported.  The key "test.a" exists in sys.modules,
and "import test.a" would work; however the attribute a isn't added to
the module test until after the import of a is completed.

So the solution is to use "import a" and "import b" instead -- inside
the package test, this will refer to modules test.a and test.b anyway, 
if they exist in the package.

--Guido van Rossum (home page: http://www.python.org/~guido/)




More information about the Python-list mailing list