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