首页 > 解决方案 > Heroku 无法识别已安装的软件包

问题描述

我正在尝试将我的 Flask 应用程序部署到 Heroku,但是,虽然成功部署,但我的 Heroku 应用程序遇到以下错误,导致它无法运行:

运行时日志的屏幕截图

即使我已经用pip install flask_sqlalchemy.

app.py的如下:

import flask
from flask import Flask, jsonify, request, render_template, url_for
import json
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import text

import pickle
with open('models/deploy_model.sav', 'rb') as f:
    model = pickle.load(f)

app = Flask(__name__, template_folder='templates')

db_name = 'schema.sql'

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + db_name

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

class Mood(db.Model):
    __tablename__ = 'result'
    index = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime)
    results = db.Column(db.Float)

@app.route('/', methods=['GET'])
def main():
    table = Mood.query.with_entities(Mood.results).all()
    table = [r for r, in table]
    return render_template('main.html', results =table)

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

我的requirements.txt文件目前还包含这些包:

...
Flask==2.0.1
Flask-SQLAlchemy==2.5.1
...

为什么 Heroku 找不到flask_sqlalchemy?我该如何解决?

标签: pythonflaskherokusqlalchemy

解决方案


即使我已经安装了软件包pip install flask_sqlalchemy

目前尚不清楚您是在开发机器上还是在 Heroku dyno 上运行它,但无论哪种情况,它都不会对在 Heroku 上运行的应用程序产生任何影响。

如果您在本地运行它,它将安装flask_sqlalchemy到您的本地环境中。Heroku 无法知道你在本地安装了什么;它会从您提交的requirements.txt文件或PipfileandPipfile.lock中安装依赖项,具体取决于您使用的工具。

如果您在 Heroku 上运行它,它将在一次性测功机中运行,一旦您停止与之交互,该测功机就会被丢弃。所有运行时依赖项都必须在您的需求文件中声明,以便 Heroku 可以将它们包含在您的应用程序的 slug 中。

这将我们引向您的下一个陈述:

我的requirements.txt文件目前还包含这些包:

...
Flask==2.0.1
Flask-SQLAlchemy==2.5.1
...

该文件是否在存储库的根目录中?必须是这样,否则 Heroku 会忽略它。

你也有一个PipfilePipfile.lock?Heroku 将使用 Pipenv 从这些文件中安装依赖项(如果它们存在)。requirements.txt如果找不到 Pipenv 文件,它只会使用 pip 从文件中安装包。选择一个或另一个。

如果这些建议都没有帮助,请编辑您的问题并显示您的构建日志。


推荐阅读