0

我的烧瓶应用程序是一个名为的包app,位于/Users/gexinjie/Codes/MyProject/xinnjie_blog

文件树是这样的

xinnjie_blog
├── app
|   ├── __init__.py
│   ├── config.py
│   ├── exceptions.py
│   ├── model.py
│   ├── model_sqlalchemy.py
│   ├── static
│   ├── templates
│   ├── util.py
│   └── views
├── manage.py

我将其导出为PATHONPATH,因此manage.py可以导入app

echo $PATHONPATH
/Users/gexinjie/Codes/MyProject/xinnjie_blog

和出口FLASK_APP

echo $FLASK_APP
manage.py

当前目录是/Users/gexinjie/Codes/MyProject/xinnjie_blog

pwd
/Users/gexinjie/Codes/MyProject/xinnjie_blog

这里是manage.py

import click
from app import create_app

app = create_app('development')

@app.cli.command()
def initdb():
    click.echo('Init the db...')

这是app.__init__.py

from flask import Flask
from .model_sqlalchemy import db

def create_app(config_name='default'):
    app = Flask(__name__)
    ...   # init
    return app

但是如果我执行flask initdb,我会收到这个错误:

Usage: flask [OPTIONS] COMMAND [ARGS]...
Error: No such command "initdb".

如果我执行flask run,我得到

Usage: flask run [OPTIONS]

 Error: The file/path provided (manage) does not appear to exist.  Please verify the path is correct.  If app is not on PYTHONPATH, ensure the extension is .py

为什么找不到manage.py?我该如何解决它。(实际上,当manage.py有烧瓶应用程序时效果很好)

# manage.py
# this work well
app = Flask(__name__)  # not app = create_app('development')

谢谢

4

1 回答 1

0

感谢@Adam,这个问题在我卸载 Anaconda 后得到了解决。

因为我一直在测试manage.pyPycharm 命令工具,并且flask是由 Anaconda(python 3.6 版)安装的,它可能缺少一些扩展(通常我在终端上使用 python3.5)。所以我认为问题是在导入过程中出现的。

烧瓶命令工具抱怨“找不到应用程序”,但真正的问题是导入错误。所以这很混乱。


“通用”解决方案:

所以如果你像我一样遇到这种问题,我建议你先检查你的应用程序的位置(尝试相对路径和绝对路径),当你不在正确的工作目录时,相对路径可能会导致定位问题.所以推荐绝对路径。

如果所有关于路径的事情都顺利,那么请确保您的应用程序所需的所有包都已安装并且可以导入。如果您使用某种类型的虚拟环境或类似的东西(在我的情况下,我使用缺少一些烧瓶扩展的其他版本的 python),可能是导入错误导致flask抱怨。

希望这可以帮到你。

于 2017-07-10T04:52:38.817 回答