> Is there another way I can structure my code so that I can run the
> sync_em.py and sync_pg.py scripts, and they can pull common functions from
The packages you are trying to access in your original post
aren't actually siblings in the sense of the stackoverflow topic above, they
are subpackages of foo_loading, and as you already found out
> So from within the sync_em.py script, I'm trying to import a function from
> from ..common.common_foo import setup_foo_logging
> I get the error:
> ValueError: Attempted relative import in non-package
> If I change directories to the parent of "foo_loading", then run
> python -m foo_loading.em_load.sync_em sync_em.py
> it works. However, this seems a bit roundabout, and I suspect I'm not
doing things correctly.
> Ideally, I want a user to be able to just run sync_em.py from it's own
directory, and have it correctly import the logging/config modules from
common_foo.py, and just work.
> What is the correct way to achieve this?
you can access them as long as the *parent* directory of foo_loading is in
sys.path through PYTHONPATH, or as the working directory, or any other
means. However, if you step into the package, e. g.
$ cd foo_loading
$ python -c 'import common'
then from Python's point of view 'common' is a toplevel package rather than
the intended 'foo_loading.common', and intra-package imports will break.
To preserve your sanity I therefore recommend that you
(1) avoid to put package directories into sys.path
(1a) avoid to cd into a package
(2) put scripts you plan to invoke directly rather than import outside the