问题
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 global_vars.py inside app1.py.
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?
回答1:
If you are running app/server.py as a script, the parent directory of app is not added to sys.path(). The app directory itself is added instead (not as a package but as a import search path).
You have 4 options:
- Move
server.pyout of theapppackage (next to it) Add a new script file next to
appthat only runs:from app import server server.main()Use the -m switch option to run a module as the main entry point:
python -m app.serverAdd the parent directory of
server.pytosys.path: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 theapppackage are onsys.path. You can import bothapp.serverandserverand Python will see these as two separate modules, each with their own entry insys.modules, with separate copies of their globals.
回答2:
need __init__.py file, will regard it as a package
app
|--server.py
|--global_vars.py
|--handlers
|--__init__.py
...
__init__.py can be empty
来源:https://stackoverflow.com/questions/16786485/python-import-modules-from-a-higher-level-package