python - Flask:无法导入名称 'app'

标签 python python-3.x flask

尝试运行我的 python 文件 updater.py 通过 SSH 连接到服务器,并每隔几个设定的时间间隔运行一些命令。我正在使用 APScheduler 运行 __init__.py 中的 update_printer() 函数。最初,我遇到了在应用程序上下文之外工作的错误,但有人建议我从 __init__.py 导入应用程序。然而,效果并不那么好。我不断收到 cannot import name 'app' 错误。

app.py

from queue_app import app

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

__init__.py

from flask import Flask, render_template
from apscheduler.schedulers.background import BackgroundScheduler
from queue_app.updater import update_printer
app = Flask(__name__)
app.config.from_object('config')

@app.before_first_request
def init():
    sched = BackgroundScheduler()
    sched.start()
    sched.add_job(update_printer, 'interval', seconds=10)

@app.route('/')
def index():
    return render_template('index.html')

updater.py

import paramiko
import json
from queue_app import app

def update_printer():
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(app.config['SSH_SERVER'], username = app.config['SSH_USERNAME'], password = app.config['SSH_PASSWORD'])

...

文件结构

queue/
   app.py
   config.py
   queue_app/
      __init__.py
      updater.py

错误

Traceback (most recent call last):
  File "app.py", line 1, in <module>
    from queue_app import app
  File "/Users/name/queue/queue_app/__init__.py", line 3, in <module>
    from queue_app.updater import update_printer
  File "/Users/name/queue/queue_app/updater.py", line 3, in <module>
    from queue_app import app
ImportError: cannot import name 'app'

如果从 APScheduler 运行,我需要做什么才能从 updater.py 访问 app.config 并避免“在应用程序上下文之外工作错误”?

最佳答案

当您在 __init__.py 文件中导入 updater 时,这是一个循环依赖项。在我的 Flask 设置中,app 是在 app.py 中创建的。

关于python - Flask:无法导入名称 'app',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35930250/

相关文章:

javascript - 从 POST 返回数据

android - 尝试从命令行执行脚本时出现 Python 语法错误

python - 如何从大型文本文件中一次性删除大量短语?

python - 包含分类数据和数值数据的 Pandas 条形图

python-3.x - ~/.conda/envs 与 ~/anaconda3/envs

python - 当某些方法需要身份验证而另一些方法不需要身份验证时,在 Flask 中构建 RESTful API

javascript - Django 获取优惠券代码并检查该代码另一列中的 bool 值 ("is available")

Python Dash图线标签截止

python - 网络抓取以形成新闻数据库

python - 无法使用 Flask-Migrate (Alembic) 迁移或升级数据库