Python -- import the package in a module that is inside the same package

I have a project structure something like this...

/some_app
    build/
    README
    out.py
    some_app/
        __init__.py
        mod1.py
        mod2.py

Now I want to import some_app package into mod2, without messing with sys.path trickery. What I simply did is...

# mod2.py
import some_app

Now when I run the mod2.py from the command line

some_app $ python mod2.py

it throws error ImportError: No module named some_app

BUT, inside the out.py file, when I do

# out.py
import some_app.mod2

and then do

some_app $ python out.py

it runs perfectly.

Hence, what is happening is this. I load a package in a module that is within the same package, and then run that module as the __main__ file -- and it doesn't work. Next, I load the same module (the one that I ran as __main__) inside another module, and then run that another module as __main__ -- and it works.

Can someone please elaborate on what's going on here?

UPDATE

I understand that there is no straightforward reason for doing this -- because I could have directly imported any modules inside the some_app package. The reason I am trying this is because, in the Django project, this is what they're doing. See this file for example

In every module, all the non-standard imports start with django.. So I wondered why and how they are doing that.

UPDATE 2

Relevant links

  • How to do relative imports in Python?
  • Python: import the containing package

mod2.py is part of some_app. As such, it makes no sense to import the module, since you're already inside it.

You can still import mod1. I'm assuming you need some_app/__init__.py to run. Not sure that's possible.


EDIT:

Looks like from . import some_module will do what you're after.


You can do import some_app.mod2 from out.py because it is in the same directory that you have some_app package, and Python interpreter starts to look for modules from that path.

The import error in mod2.py is normal because there is not a some_app package in mod2.py folder.