【问题标题】:Cannot import app modules implementing Flask CLI无法导入实现 Flask CLI 的应用程序模块
【发布时间】:2019-02-23 20:47:47
【问题描述】:

由于某种原因,当我尝试执行我的自定义命令时:

烧瓶创建用户

每当我尝试从我的 src 文件夹中导入任何内容时都会出错:

文件“/app/backend/flask_app/command.py”,第 17 行,在 seed_db 中 导入 src.models ModuleNotFoundError: 没有名为“src”的模块

/
    __init__.py
    command.py
    run.py
    src/
        __init__.py
        models/
            __init__.py
            user_model.py

command.py

import click
from flask import Flask
from flask.cli import with_appcontext

app = Flask(__name__)


@app.cli.command()
@with_appcontext
def create_user():
    import src.models as models
    print("hello")

app.cli.add_command(seed_db)

【问题讨论】:

  • __init__.pysrc 目录中?复制的文件树有点不清楚。
  • 我在阅读您的树时遇到了一点问题,但我认为 @Joost 之前提到的 src/ 目录中的 __init__.py 文件丢失了
  • @Joost 是的,你是对的。 init.py 位于 src 目录中。我把树修好了,让它更清晰。
  • 树形结构中的command.py文件在哪里?是在src文件夹的同一级还是在里面?
  • @AntonioRomano 修复了树-树根目录下的command.py

标签: python flask command-line-interface


【解决方案1】:

我找到了解决办法。

我不得不删除根目录__init__.py 文件。

我从著名的 Miguel Grinberg 那里找到了这个答案:

https://github.com/miguelgrinberg/flasky/issues/310#issuecomment-340641813

这些文件 (__init__.py) 使 python 认为包的主目录是上面的一个目录,因此这是添加到 Python 路径的目录。通常您希望您的顶级目录不是 Python 包,以便当前目录转到该路径。

__

【讨论】:

    【解决方案2】:

    这是导入模块的python方式问题,而不是Flask命令。

    由于 command.py 文件与 models 文件夹位于同一级别,因此您可以编写:

    import models.user_models as users
    

    之后,您可以从 users 参考中访问 user_models 模块:

    import models.user_models as users
    users.some_function_name()
    

    【讨论】:

    • 抱歉,我认为我的树结构有误。对错误表示歉意。 command.py 与模型不在同一级别,它位于应用程序根目录中。 modelssrc 目录中。
    • 我尝试将command.py 放在models 目录的同一级别,您提供的解决方案也不起作用。同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2022-10-18
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多