Python3: imports don't see files from same directory?

John O'Hagan research at johnohagan.com
Sun May 8 02:04:30 EDT 2011


On Sat, 7 May 2011, Ian Kelly wrote:
[...]
> 
> Implicit relative imports were removed in Python 3 to prevent
> ambiguity as the number of packages grows.  See PEP 328.
> 
> If you have two modules in the same package, pack1.mod1 and
> pack1.mod2, then in pack1.mod1 you can no longer just do "import 
mod2"
> or "from mod2 import foo".  Either use an absolute import ("from
> pack1.mod2 import foo") or make the relative import explicit ("from
> .mod2 import foo" -- note the ".")
> 
> If you're upgrading scripts from Python 2 to Python 3, you should
> really run them through the 2to3 tool.  I believe this is one of the
> many things it will fix for you automatically.

For some reason I haven't fathomed yet, I've found that while 2to3 
does change the import syntax to the dot form as you say, this results 
in "ValueError: Attempted relative import in non-package", and I have 
to change it back to the old way, which works fine although the docs 
say it shouldn't. This is python 3.2 on Debian testing. 

For example, if I have a directory containing an __init__.py file, and two 
modules, one of which is called mod1 and contains

#!/usr/bin/python3
a=1

in the other module I can have

import mod1

or

from  mod1 import a

but not 

from .mod1 import a

or

import .mod1


What gives?



More information about the Python-list mailing list