Problems with relative imports and pep 366
Jean-Michel Pichavant
jeanmichel at sequans.com
Tue Jun 1 05:39:06 EDT 2010
Gabriele Lanaro wrote:
> I've yet asked this question on SO, I'll copy the contents:
>
> I have a "canonical file structure" like that (I'm giving sensible names
> to ease the reading):
>
> mainpack/
>
> __main__.py
> __init__.py
>
> - helpers/
> __init__.py
> path.py
>
> - network/
> __init__.py
> clientlib.py
> server.py
>
> - gui/
> __init__.py
> mainwindow.py
> controllers.py
>
> In this structure, for example modules contained in each package may
> want to access the helpers utilities through relative imports in
> something like:
>
> # network/clientlib.py
> from ..helpers.path import create_dir
>
> The program is runned "as a script" using the __main__.py file in this
> way:
>
> python mainpack/
>
> Trying to follow the PEP 366 I've put in __main__.py these lines:
>
> ___package___ = "mainpack"
> from .network.clientlib import helloclient
>
> But when running:
>
> $ python mainpack
> Traceback (most recent call last):
> File "/usr/lib/python2.6/runpy.py", line 122, in _run_module_as_main
> "__main__", fname, loader, pkg_name)
> File "/usr/lib/python2.6/runpy.py", line 34, in _run_code
> exec code in run_globals
> File "path/mainpack/__main__.py", line 2, in <module>
> from .network.clientlib import helloclient
> SystemError: Parent module 'mainpack' not loaded, cannot perform relative import
>
> What's wrong? What is the correct way to handle and effectively use
> relative imports?
>
> I've tried also to add the current directory to the PYTHONPATH, nothing
> changes.
>
> link:
> http://stackoverflow.com/questions/2943847/nightmare-with-relative-imports-how-does-pep-366-work
>
>
>
I'm not using relative imports at all, so I can't help you on that
point, however, did you consider using absolute imports ? The world
becomes so simple with these :) .
BTW,
___package___ = "mainpack"
looks weird to me, are you sure it would not be better with
__package__ = "mainpack" # only 2 leading/traling underscore
JM
More information about the Python-list
mailing list