This is my package hierarchy
app |--__init__.py //Empty file |--server.py |--global_vars.py | |--handlers |--__init__.py //Empty file | |--url1 | |--__init__.py //Empty file | |--app1.py | |--app2.py | |--url2 |--__init__.py //Empty file |--app3.py
Now I want to import
So I gave
import app.global_vars.py inside app1.py.
But I get the following error:
import app.global_vars ImportError: No module named app.global_vars
I should also mention that I am importing app1.py from server.py.
server.py is the file I am actually running. When server.py imports app1.py,
app1.py tries to import
global_vars.py and I get the above mentioned error
What am I doing wrong here?
If you are running
app/server.py as a script, the parent directory of
app is not added to
app directory itself is added instead (not as a package but as a import search path).
You have 4 options:
server.pyout of the
apppackage (next to it)
Add a new script file next to
appthat only runs:
from app import server server.main()
-mswitch option to run a module as the main entry point:
python -m app.server
Add the parent directory of
import os.path import sys parent = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, parent)
This last option can introduce more problems however; now both the
apppackage and the modules contained in the
apppackage are on
sys.path. You can import both
serverand Python will see these as two separate modules, each with their own entry in
sys.modules, with separate copies of their globals.
__init__.py file, will regard it as a package
__init__.py can be empty