Python导入模块在Flask的同一目录中

时间:2016-10-14 08:03:59

标签: python flask

我正在尝试创建Flask应用程序。我想在我的应用程序中包含一个单独的模块,将逻辑分成不同的单元。单独的模块称为“验证器”。我当前的目录结构如下所示:

src/
    validation-api/
        __init__.py
        api.py
    validator/
        __init__.py
        validator.py
    validation-form/
        ...
    updater/
        ...

我的Flask应用程序在api.py,我正在尝试from validator import ValidationOptions, ValidationResult, ValidationRun ValidationOptionsValidationResultValidationRunvalidator中的类}。

我收到错误

  

ImportError:没有名为validator的模块

如果我尝试from .validator...from ..validator,我会收到错误

  

ValueError:在非包中尝试相对导入

我不太了解模块和包在Python中是如何工作的。有什么建议吗?

api.py的内容:

from flask import Flask, request
from validator.validator import ValidationOptions, ValidationResult, ValidationRun

app = Flask(__name__)

@app.route("/validate", methods=["POST"])
def validate(self):
    pass

if __name__ == '__main__':
    app.run(debug=True)

我使用以下三个命令启动Flask:

set FLASK_APP=api
set FLASK_DEBUG=1
python -m flask run

2 个答案:

答案 0 :(得分:1)

感谢@ Daniel-Roseman,我已经知道发生了什么。我将FLASK_APP环境变量更改为validation-api.api,并从python -m flask run运行src命令。所有进口现在都在运作!

答案 1 :(得分:0)

如果您有一个简单的应用程序

src/
    app.py
    something.py
    templates/

app.py中包含语句import something,然后确保源目录中没有__init__.py

有关原因,请参见the doc