Re: Relative imports in Python 3.0

2008-12-17 Thread Kay Schluehr
On 17 Dez., 11:01, Nicholas  wrote:

> I am sure I am not the first to run into this issue, but what is the
> solution?

When you use 2to3 just uncomment or delete the file fix_import.py in
lib2to3/fixes/ .

--
http://mail.python.org/mailman/listinfo/python-list


Re: Relative imports in Python 3.0

2008-12-17 Thread Benjamin
On Dec 17, 4:01 am, Nicholas  wrote:
> Imagine a module that looks like
>
> ModuleDir
>      __init__.py
>      a.py
>      b.py
>
> In python 2.x I used to have tests at the end of each of my modules,
> so that module b.py might look something like
>
> import a
>  ..
>  ..
>
> if __name__ == '__main__':
>    runtests()
>
> But under Python 3.0 this seems impossible.  For usual use import a.py
> has to become the line:
>
> from . import a
>
> But if I use that form it is no longer possible to run b.py as a
> standalone script without raising an error about using relative
> imports.
>
> I am sure I am not the first to run into this issue, but what is the
> solution?

Use absolute imports:

from ModuleDir import a

>
> Best wishes,
>
> Nicholas

--
http://mail.python.org/mailman/listinfo/python-list


Re: Relative imports in Python 3.0

2008-12-17 Thread Brian Allen Vanderburg II

nicholas.c...@gmail.com wrote:

Imagine a module that looks like

ModuleDir
 __init__.py
 a.py
 b.py


In python 2.x I used to have tests at the end of each of my modules,
so that module b.py might look something like

import a
 ..
 ..

if __name__ == '__main__':
   runtests()

But under Python 3.0 this seems impossible.  For usual use import a.py
has to become the line:

from . import a

But if I use that form it is no longer possible to run b.py as a
standalone script without raising an error about using relative
imports.

I am sure I am not the first to run into this issue, but what is the
solution?

Best wishes,

Nicholas
--
http://mail.python.org/mailman/listinfo/python-list
  

Sorry for the duplicate, sent to wrong email.

Python 3 (and I think 2.6) now use absolute import when using a 'import 
blah' statement.


if ('.' in __name__) or hasattr(globals, '__path__'):
  from . import a
else:
  import a

If '__name__' has a'.' then it is either a package or a module in a 
package, in which case relative imports can be used.  If it does not 
have a '.' it may still be a package but the '__init__.py' file, in 
which case the module has a '__path__' attribute, so relative imports 
can be used.  Otherwise it is not a package or in a package so absolute 
imports must used.  Also, since it is not in a package it is assumed 
that it is top module (__main__) or possible module imported from the 
top that is not in a package, such as a.py doing an 'import b', b would 
be a module but not a package so still probably need absolute imports, 
my guess anyway.


But I also think that 'from . import a' would be nice if it would work 
from non-packages as well, meaning just 'import a' if it is a non-package.


Brian A. Vanderburg II
--
http://mail.python.org/mailman/listinfo/python-list


Relative imports in Python 3.0

2008-12-17 Thread Nicholas
Imagine a module that looks like

ModuleDir
 __init__.py
 a.py
 b.py


In python 2.x I used to have tests at the end of each of my modules,
so that module b.py might look something like

import a
 ..
 ..

if __name__ == '__main__':
   runtests()

But under Python 3.0 this seems impossible.  For usual use import a.py
has to become the line:

from . import a

But if I use that form it is no longer possible to run b.py as a
standalone script without raising an error about using relative
imports.

I am sure I am not the first to run into this issue, but what is the
solution?

Best wishes,

Nicholas
--
http://mail.python.org/mailman/listinfo/python-list