Re: Relative imports in Python 3.0
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
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
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
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