flask应用程序中python中的相对导入

flask应用程序中python中的相对导入,python,flask,Python,Flask,我读过很多这样的问题和博客。我正在尝试构建我的烧瓶应用程序。我的应用程序的当前结构如下: application run_server.py /config __init__.py production.py staging.py development.py /app __init__.py /site __init__.py views.py

我读过很多这样的问题和博客。我正在尝试构建我的烧瓶应用程序。我的应用程序的当前结构如下:

application
    run_server.py
    /config
       __init__.py
       production.py
       staging.py
       development.py
    /app
       __init__.py
       /site
           __init__.py
           views.py
现在,在
app/\uuuuu init\uuuuuuy.py
中,我想根据我的环境(开发、暂存、生产)访问配置

我得到这个错误:

ValueError:尝试在顶级包之外进行相对导入

我试过使用
-m
开关。 我还尝试将
PYTHONPATH
设置为我的根目录,告诉解释器什么是顶级包。
我想我在相对导入中遗漏了一些基本信息。

假设您在
application/config/\uuu init\uuu.py
中有
config


您还需要
应用程序
目录下的
\uuuuu init\uuuuu.py
,如果不需要,则
应用程序/应用程序
是您的顶级软件包,如果您通过
run_server.py
运行应用程序,则无法访问
application/config

app/\uu init\uuuuuuuuupy
中不需要相对导入。你可以简单地说

from config import <production/staging/development>
从配置导入
这是因为,当您的解释器解释
run_server.py
时,在行中说,
from app import
,它将获取
app/\uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
内容,并尝试在顶层执行它们,即从目录
应用程序
执行

现在,假设您正在顶层运行来自..config import config的
。显然,它会抛出一个错误

尝试使用。我想这会让事情变得更容易

from __future__ import absolute_import
from application.config import production
这是绝对的,因为您正在指定从中导入的确切路径,以减少歧义


此外,您在
应用程序
文件夹中缺少
\uuuu init\uuuuuuuuuupy.py
,您可以导入模块而不是名称空间,因为没有config.py文件
from __future__ import absolute_import
from application.config import production