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

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

Reply via email to