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

时间:2015-12-31 06:40:15

标签: python flask

我读过很多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设置为我的根目录,以告诉解释器什么是顶级包。 我想我错过了相对进口的一些基本原因。

3 个答案:

答案 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。显然,它会抛出一个错误。