Organising packages/modules - importing functions from a common.py in a separate directory?

Victor Hooi victorhooi at gmail.com
Mon Oct 28 21:08:10 EDT 2013


Hi,

If I try to use:

    from .common.common_foo import setup_foo_logging

I get:

    ValueError: Attempted relative import in non-package

And the absolute imports don't seem to be able to find the right modules.

Is it something to do with the fact I'm running the sync_em.py script from the "foo_loading/em_load" directory?

I thought I could just refer to the full path, and it'd find it, but evidently not...hmm.

Cheers,
Victor

On Tuesday, 29 October 2013 12:01:03 UTC+11, Ben Finney  wrote:
> Victor Hooi <victorhooi at gmail.com> writes:
> 
> 
> 
> > Ok, so I should be using absolute imports, not relative imports.
> 
> 
> 
> I'd say it is fine to use relative imports, so long as they are
> 
> explicit. (In Python 3, the default for an import is to be absolute, and
> 
> the *only* way to do a relative import is to make it explicitly
> 
> relative. So you may as well start doing so now.)
> 
> 
> 
> > Hmm, I just tried to use absolute imports, and it can't seem to locate
> 
> > the modules:
> 
> >
> 
> > In the file "foo_loading/em_load/sync_em.py", I have:
> 
> >
> 
> >     from common.common_bex import setup_foo_logging
> 
> 
> 
> So I'd recommend this be done with an explicit relative import:
> 
> 
> 
>     from .common.common_bex import setup_foo_logging
> 
> 
> 
> or, better, import a module:
> 
> 
> 
>     from .common import common_bex
> 
> 
> 
> or a whole package:
> 
> 
> 
>     from . import common
> 
> 
> 
> -- 
> 
>  \         “I went over to the neighbor's and asked to borrow a cup of |
> 
>   `\       salt. ‘What are you making?’ ‘A salt lick.’” —Steven Wright |
> 
> _o__)                                                                  |
> 
> Ben Finney



More information about the Python-list mailing list