You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重构Flask项目目录后运行报ImportError无法启动如何解决

Flask应用拆分结构后启动报ImportError排查求助

我最初参考Flask官方教程的基础结构开发应用,所有代码都放在同一目录下。随着项目依赖增多,我需要将应用拆分为独立组件,因此调整了项目结构,当前目录组织如下:

Real-Life-Application
│
├── App
│   ├── UI
│   │   ├── static
│   │   │   ├── css
│   │   │   │   └── main.css
│   │   │   ├── images
│   │   │   │   ├── album_placeholder.jpeg
│   │   │   │   ├── header.jpeg
│   │   │   │   └── logo.png
│   │   │   └── javascript
│   │   │       ├── create.js
│   │   │       └── tracks.js
│   │   └── templates
│   │       ├── base.html
│   │       ├── create.html
│   │       ├── index.html
│   │       ├── information.html
│   │       └── tracks.html
│   ├── __init__.py
│   ├── authenticate.py
│   ├── db_actions.py
│   ├── routes.py
│   ├── services.py
│   └── user_operations.py
├── Pipfile
├── Pipfile.lock
├── Procfile
├── README.md
├── Testing
│   ├── __init__.py
│   └── testing.py
├── __pycache__
│   ├── authenticate.cpython-39.pyc
│   ├── config.cpython-39.pyc
│   ├── main.cpython-39.pyc
│   ├── services.cpython-39.pyc
│   └── user_operations.cpython-39.pyc
├── config.py
├── requirements.txt
├── run.py
└── setup.py

我执行export FLASK_APP=run.py和flask run命令启动应用时,收到如下报错:Error: While importing 'run', an ImportError was raised.

我暂未定位到错误原因,恳请各位帮忙排查,相关文件内容如下:

1. run.py文件内容

from App import create_app

app = create_app()

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

2. App/init.py文件内容

from flask import Flask
import config
from flask_bootstrap import Bootstrap
from apscheduler.schedulers.background import BackgroundScheduler
import sqlalchemy

def create_app() -> Flask:
    app = Flask(__name__)
    app.config.from_object(config)
    app.secret_key = app.config['CLIENT_SECRET']

    # 连接本地MySQL服务
    engine = sqlalchemy.create_engine('sqlite:///:memory:', echo=True)

    # 创建会话和基础声明类
    from sqlalchemy.orm import sessionmaker
    Session = sessionmaker(bind=engine)

    from sqlalchemy.ext.declarative import declarative_base
    Base = declarative_base()

    # 确保用户表创建完成
    from App.user_operations import User
    Base.metadata.create_all(engine)

    # 定时更新TopTracks播放列表
    from App.services import updatePlaylists
    scheduler = BackgroundScheduler()
    scheduler.add_job(updatePlaylists, trigger='interval', days=1)
    scheduler.start()

    import App.routes
    bootstrap = Bootstrap(app)
    
    return app

3. App/routes.py文件内容

import logging
import time

# Flask相关导入
from flask import (jsonify, make_response, redirect, render_template,
                   request, session)

# 本地模块导入
from authenticate import createStateKey, getToken
from App import app
from services import (addTracksPlaylist, createPlaylist, getAllTopTracks,
                      getRecommendedTracks, getTopTracksURI,searchSpotify,
                      createRadarChart, getLikedTrackIds, likedTrackIdsDataFrame,
                      normalizeDf)
from user_operations import (addUser, getUserInformation)

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

# 其余路由定义在此省略

4. config.py文件内容

CLIENT_ID = ''
CLIENT_SECRET = ''
REDIRECT_URI = 'http://127.0.0.1:5000/callback'
RESPONSE_TYPE = 'code'
GRANT_TYPE = 'authorization_code'
TOKEN_URL = ''
SCOPE = 'user-read-email'
AUTHORIZATION = 'Authorization: Basic *<base64 encoded client_id:client_secret>*'
DATABASE_PASSWORD = ''
DATABASE_NAME = 'DB'

非常感谢各位抽时间提供帮助。


内容的提问来源于stack exchange,提问作者wisenickel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:06:03