这是我包层次
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
现在,我想导入global_vars.py
内app1.py
。所以我给import app.global_vars.py
内app1.py.
但我得到以下错误:
import app.global_vars
ImportError: No module named app.global_vars
我还要提到的是我从server.py进口app1.py。 server.py
是我实际运行该文件。当server.py进口app1.py,app1.py
尝试导入global_vars.py
,我得到上述错误
我在做什么错在这里?
如果你是作为一个脚本运行app/server.py
,app
的父目录未添加到sys.path()
。该app
目录本身,而不是被添加(而不是作为一个包,但作为进口搜索路径)。
你有4个选项:
server.py
出app
封装(它旁边)app
只运行:
from app import server
server.main()
-m
switch option运行模块为主要切入点:
python -m app.server
server.py
到sys.path
的父目录:
import os.path
import sys
parent = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent)
最后一个选项可以引入却更问题;现在app
包和包含在app
包模块都是上sys.path
。你可以导入这两个app.server
和server
和Python会看到这些作为两个独立的模块,每个模块在sys.modules
自己的条目,与他们全局的单独副本。需要__init__.py
文件,将其视为一个包
应用 | --server.py | --global_vars.py | --handlers
| --Qazxswpoi ...
__init__.py
可以是空的