Has*_*ken 4 python python-module package python-import
这是我的包层次结构
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
Run Code Online (Sandbox Code Playgroud)
现在我想在global_vars.py里面导入app1.py.所以我给了
import app.global_vars.pyapp1.py.
但是我收到以下错误:
import app.global_vars
ImportError: No module named app.global_vars
Run Code Online (Sandbox Code Playgroud)
我还要提一下,我从server.py导入app1.py.server.py是我实际运行的文件.当server.py导入app1.py时,app1.py尝试导入global_vars.py,我得到上面提到的错误
我在这做错了什么?
Mar*_*ers 10
如果您app/server.py作为脚本运行,app则不会添加父目录sys.path().该app目录本身,而不是被添加(而不是作为一个包,但作为进口搜索路径).
你有4个选择:
server.py 出所述的app包(它旁边)添加一个新脚本文件旁边app只运行:
from app import server
server.main()
Run Code Online (Sandbox Code Playgroud)使用-mswitch选项将模块作为主入口点运行:
python -m app.server
Run Code Online (Sandbox Code Playgroud)添加的父目录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)
Run Code Online (Sandbox Code Playgroud)
最后一个选项可能会引入更多问题; 现在两个app包和包含在模块中的app封装上sys.path.你可以导入两个app.server,server并且Python会将这些视为两个独立的模块,每个模块都有自己的条目sys.modules,并且它们的全局变量都是单独的.