我有一个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
。
答案 0 :(得分:0)
我明白了。我需要在解释器中设置这些:
import sys
sys.path.append('working path here')
而且,瞧,一切都按预期运作。