Re: Problems with relative imports and pep 366

Discussion in 'Python' started by Jean-Michel Pichavant, Jun 1, 2010.

  1. 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
    Jean-Michel Pichavant, Jun 1, 2010
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Albert
    Replies:
    4
    Views:
    10,830
    Albert
    Jul 10, 2008
  2. Gabriele Lanaro

    Problems with relative imports and pep 366

    Gabriele Lanaro, May 31, 2010, in forum: Python
    Replies:
    0
    Views:
    321
    Gabriele Lanaro
    May 31, 2010
  3. zildjohn01
    Replies:
    0
    Views:
    628
    zildjohn01
    Feb 22, 2011
  4. Victor Hooi
    Replies:
    1
    Views:
    98
    Devin Jeanpierre
    Nov 25, 2013
  5. Replies:
    0
    Views:
    65
Loading...

Share This Page