使用 Spotipy 运行 Flask Web 应用程序时没有名为“client”的模块

问题描述 投票:0回答:1

我在尝试为音乐推荐项目运行 Flask Web 应用程序时遇到导入错误。我收到的错误消息是:

Traceback (most recent call last):
  File "/data/data/com.termux/files/home/music_recommender/app.py", line 4, in <module>
    app = create_app()
  File "/data/data/com.termux/files/home/music_recommender/app/__init__.py", line 18, in create_app
    from app import routes
  File "/data/data/com.termux/files/home/music_recommender/app/routes.py", line 2, in <module>
    import spotipy
  File "/data/data/com.termux/files/home/music_recommender/venv/lib/python3.11/site-packages/spotipy/__init__.py", line 2, in <module>
    from client import Spotify, SpotifyException
ModuleNotFoundError: No module named 'client'

我认为该问题与spotipy 模块及其“客户端”子模块有关。但是,我不确定为什么它找不到这个子模块。

我已从此 GitHub 链接克隆了存储库:GitHub 存储库

我尝试通过在项目根目录中执行 python app.py 来运行 Flask Web 应用程序。

Flask网站并没有成功运行,而是遇到了上面提到的ImportError。

我已经审查了代码并确保我已经安装了项目的requirements.txt 文件中提到的所有必要的依赖项。

python flask importerror modulenotfounderror spotipy
1个回答
0
投票

我已经克隆了存储库,并能够在执行以下步骤后运行该项目:

更新
spotipy
版本

项目

spotipy
文件中存在的
requirements.txt
版本已过时。更新到最新版本可以修复您遇到的
ModuleNotFoundError
异常。要更新软件包,请运行以下命令:

$ pip install --upgrade spotipy

修复
NameError
异常

即使修复了有关

spotipy
版本的问题,如果您尝试执行命令
python app.py
,您仍然会收到
NameError
。 模块
app/routes.py
似乎正在尝试引用名为
app
的对象,该对象是由
create_app()
中的函数
app/__init__.py
创建的,但无法找到它。要解决此问题,您可以对项目模块执行以下修改:

app/__init__.py

app/__init__.py
中的源代码替换为:

import os

import spotipy
import spotipy.util as sp_util  # Import Spotify utility functions
from config import Config
from flask import (Flask, redirect, redirect, render_template, render_template, request,
                   request, session, session, url_for, url_for)
from flask_session import Session
from spotipy.oauth2 import SpotifyOAuth, SpotifyOAuth


# Initialize and configure Flask-Session
session = Session()


def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)

    # Configure Flask-Session
    app.config['SESSION_TYPE'] = 'filesystem'
    app.config['SESSION_PERMANENT'] = False
    session.init_app(app)
    return app


app = create_app()
from app.routes import *

app/routes.py

将导入

from app import app
添加到模块
app/routes.py
:

from flask import render_template, redirect, url_for, session, request
import spotipy
from spotipy.oauth2 import SpotifyOAuth
import spotipy.util as sp_util  # Import Spotify utility functions
import os

from app import app  # <-- Add this import HERE

# Define Spotify API credentials and settings
client_id = os.environ.get('SPOTIPY_CLIENT_ID')
# ...

app.py

将其替换为

from app import create_app
,而不是导入
from app import app
。这是
app.py
脚本,其中包含修改后的导入语句:

from flask import Flask
from app import app


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

完成前面提到的修改后,您应该能够运行命令

python app.py
并访问网络应用程序:

© www.soinside.com 2019 - 2024. All rights reserved.