"Ben Finney" <ben+pyt...@benfinney.id.au> wrote in message
news:87ei6t646h....@benfinney.id.au...
人言落日是天涯,望极天涯不见家 <kelvin....@gmail.com> writes:
Here is a simple example:
[app]
[module]
__init__.py --> empty
a.py --> import b
b.py --> defined a function foo()
test.py
In the test.py, contains the below statement:
from module import a
Execute the test.py will get error:
This works fine for me::
$ mkdir --parents app/module/
$ touch app/module/__init__.py
$ printf "import b\n" > app/module/a.py
$ printf "def foo(): pass\n" > app/module/b.py
$ printf "from module import a\n" > app/test.py
$ find .
.
./app
./app/module
./app/module/__init__.py
./app/module/a.py
./app/module/b.py
./app/test.py
$ python app/test.py
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "module\a.py", line 1, in <module>
import b
ImportError: No module named b
Why the b.py can not be found by a.py?
I get no errors; the code appears to run fine. Perhaps the scenario is
not exactly as you describe?
I get exactly the same result as the OP, using python 3.2 on both windows
and linux. It works using python 2.6.
I can fix it by changing a.py from 'import b' to 'from . import b'.
As I understand it, the reason is that python 3.x will no longer look for an
absolute import in the current package - it will only look in sys.path.
Frank Millman
--
http://mail.python.org/mailman/listinfo/python-list