从解释器访问Flask wsgi结构化应用程序

时间:2016-03-03 14:46:02

标签: python configuration path wsgi

我有一个Flask应用程序,可以部署为wsgi。我遇到的一个问题是当我想从Python解释器加载文件时。

结构是:

|----api
|---------api
|--------------static
|--------------templates
|--------------venv
|--------------models.py
|--------------...

这样在Python解释器中,当我在目录中加载文件时 api/api我需要以dir.filename的形式访问它们。例如,如果我有一个文件api/api/models.py,我可以通过输入命令from api.mb_models import db加载它...但是,当我通过Web服务器运行wsgi应用程序时,这种语法会窒息。然后我得到一个文件没有退出的错误:

Traceback (most recent call last): File "api/extract.py", line 15, in <module> import api.models as models ImportError: No module named api.models

我也试过设置os变量如下,

path = 'api'
os.chdir(path)

虽然这现在作为wsgi工作,但我在尝试从解释器加载时遇到了同样的错误。我可以将此作为wsgi运行的唯一方法是不在我的import语句中指定路径或使用os属性,这在我在解释器中加载文件时不起作用

问题是如何与wsgi app共享相同的部署配置,以及如何从Python解释器运行。

注意:我正在使用虚拟环境。

修改

我删除了文件导入中dir的所有引用,因此wsgi应用程序正常运行,然后在解释器中运行os.cwd(),这给了我/Users/gms/development/python/api的预期结果。然后我使用os.chdir('/Users/gms/development/python/api/api')设置工作目录,运行os.cwd()并获得工作目录所需的结果,但是当我尝试从解释器加载时,我仍然得到ImportError: No module named extract

1 个答案:

答案 0 :(得分:0)

我明白了。我需要在解释器中设置这些:

import sys
sys.path.append('working path here')

而且,瞧,一切都按预期运作。