我读过很多SO问题和博客。我正在尝试构建我的烧瓶应用程序。我的应用程序的当前结构如下:
application
run_server.py
/config
__init__.py
production.py
staging.py
development.py
/app
__init__.py
/site
__init__.py
views.py
现在,在app/__init__.py
内我想根据我的环境(开发,登台,制作)访问配置。
from ..config import config
我收到此错误:
ValueError:尝试相对导入超出toplevel包
我尝试过使用-m
开关。
我还尝试将PYTHONPATH
设置为我的根目录,以告诉解释器什么是顶级包。
我想我错过了相对进口的一些基本原因。
答案 0 :(得分:3)
尝试使用absolute import。恕我直言,它让事情变得更容易
from __future__ import absolute_import
from application.config import production
这是绝对的,因为您指定了导入的确切路径,从而减少了歧义。
此外,您在__init__.py
文件夹
application
答案 1 :(得分:1)
假设config
中有application/config/__init__.py
。
__init__.py
目录下还需要application
,如果没有,则application/app
是您的顶级包,您无法访问application/config
。
答案 2 :(得分:0)
如果您通过run_server.py
运行应用程序,则app/__init__.py
无需进行相对导入。你可以简单地说,
from config import <production/staging/development>
这是因为,当您的口译员解释run_server.py
时,在该行from app import <something>
处,它将获取app/__init__.py
内容并尝试在顶层执行它们,即从目录{{1 }}
现在,假设您在顶层运行application
。显然,它会抛出一个错误。