首页 > 解决方案 > IDLE 控制台中 Flask 应用程序的导入错误

问题描述

我想将一个 Flask 对象导入 IDLE,以便进行实验和探索。

我可以通过python从项目目录中键入来成功启动交互式命令行会话。

Python 3.7.5 (default, Nov 18 2019, 00:27:11)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from app import app
>>> dir(app)
['Flask', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', 
'__package__', '__spec__', 'app', 'create_app', 'current_app', 'index', 'make_response', 'randint']
>>> exit()

但我想使用 IDLE 进行这种探索。
所以我sys.path在 IDLE 中添加了我的项目路径。当我尝试使用导入时from app import app,我收到错误AttributeError: module 'config' has no attribute 'settings

代码示例:

from flask import Flask

def create_app():
    app = Flask(__name__,instance_relative_config=True)

    app.config.from_object('config.settings')
    app.config.from_pyfile('settings.py',silent=True)

    return app

项目结构:

project_dir/
   ├── app/
   │   ├── app.py
   ├── config/
   │   │                                                                                                                                                                                
   │   └── settings.py                                                                                                                                                                                               
   └── instance/                                                                                                                                                                                                          
       └── settings.py 

为什么 IDLE 在目录中找不到settings.py模块config

注意:当我删除 lineapp.config.from_object('config.settings')时,导入成功。

标签: pythonflaskpython-idle

解决方案


IDLE 仅在您使用 IDLE open 命令编辑文件时查找文件。当您要求 IDLE 执行您的代码时,它会调用 compile() 并将结果传递给正在执行的 python。

app.config.from_object('config.settings')由于错误消息中给出的原因而失败:config对象没有属性settings。添加import config.settings可能会解决此问题。我无法确定,因为您的项目结构图不明确。它既显示config为顶级目录,app与.instanceapp


推荐阅读