flask cli找不到脚本manage.py

时间:2017-07-08 07:21:27

标签: python flask flask-cli

我的烧瓶应用是位于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')

谢谢

1 个答案:

答案 0 :(得分:0)

感谢@Adam,卸载Anaconda后问题解决了。

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

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

“普遍”解决方案:

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

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

希望这可以帮到你。