首页 > 解决方案 > Flask 在 Raspberry Pi 中找不到应用程序

问题描述

首先,我想说我有在 MacOS 和 Windows 10 上使用烧瓶的源代码(各种人正在开发该网站)。我们想在 Raspberry Pi 3 B+ 中运行我们的源代码。我已经在 RPI 上安装了烧瓶和 python。以下是详细信息:

flask --version
Flask 0.12.1

Python 3.5.3 (default, Sep 27 2018, 17:25:39) 

我的 MacOS 的唯一区别是 Python 是 3.7.5 而 Flask 是 1.0.2。(我试图在 RPI 上多次更新 python 和烧瓶,它总是会安装相同的)

这是版本案例否定的地方,我在 RPI 中创建了一个任意 python 文件:

from flask import Flask, render_template, request
app = Flask(__name__)

@app.route('/')
def test():
    return "HELLO"

if __name__ == '__main__':
    app.run(debug = True, port=8080)
python3 test.py

这在 RPI 的本地主机上运行烧瓶服务器没问题。

问题是当我尝试通过以下方式在 RPI 上运行源代码时:

export FLASK_APP=SmartLock
export FLASK_ENV=development
flask run

我收到以下消息:

pi@raspberrypi:~/Downloads/CSI4999 $ export FLASK_APP=SmartLock
pi@raspberrypi:~/Downloads/CSI4999 $ flask run
Usage: flask run [OPTIONS]

Error: Failed to find application in module "SmartLock".  Are you sure it contains a Flask application?  Maybe you wrapped it in a WSGI middleware or you are using a factory function.

我的结构

CSI4999
       |
       SmartLock
                |
                -static
                -templates
                __init__.py
                other modules

我从 CSI4999 内部运行命令(就像我在 PC 上所做的那样)。除非 Raspberry Pi 需要不同的结构,否则我不明白为什么它可以在 MacOS 和 Windows 10 上运行,而不是在 RPI 上运行。

我搜索了 Flask 文档(我也尝试了 [ https://flask.palletsprojects.com/en/1.1.x/tutorial/factory/])并且互联网没有任何帮助。

我什至试图这样做:

python -m flask run

但那会回来

  File "/usr/lib/python3.5/socketserver.py", line 454, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use

任何输入将不胜感激。

[更新:]

我已经安装了 Python 3.7 和 Flask 1.1 烧瓶 PATH 是:

PATH:/usr/lib/python3/dist-packages/flask

pi@raspberrypi:~ $ flask --version
Python 3.7.5
Flask 1.1.1
Werkzeug 0.16.1

里面pi@raspberrypi:~/Downloads/CSI4999/

FLASK_APP=SmartLock
flask run

返回:

 * Serving Flask app "SmartLock"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
/usr/local/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py:835: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
Traceback (most recent call last):
  File "/usr/local/bin/flask", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 966, in main
    cli.main(prog_name="python -m flask" if as_module else None)
  File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 860, in run_command
    extra_files=extra_files,
  File "/usr/local/lib/python3.7/site-packages/werkzeug/serving.py", line 1012, in run_simple
    inner()
  File "/usr/local/lib/python3.7/site-packages/werkzeug/serving.py", line 965, in inner
    fd=fd,
  File "/usr/local/lib/python3.7/site-packages/werkzeug/serving.py", line 808, in make_server
    host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd
  File "/usr/local/lib/python3.7/site-packages/werkzeug/serving.py", line 701, in __init__
    HTTPServer.__init__(self, server_address, handler)
  File "/usr/local/lib/python3.7/socketserver.py", line 452, in __init__
    self.server_bind()
  File "/usr/local/lib/python3.7/http/server.py", line 137, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "/usr/local/lib/python3.7/socketserver.py", line 466, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use

这意味着烧瓶运行并找到模块。现在这是另一个问题。有任何想法吗?

[更新]

在 SDCARD 上刷新 RASPIAN 已解决问题。仅使用 PIP3 安装库

标签: pythonflaskraspberry-pi

解决方案


看起来你可能不小心混合了 Python2.7 和 Python3 安装的 Flask,可悲的是,这很容易做到。在您的情况下,我很想用新的 Raspbian 副本重新映像 SD 卡,然后小心翼翼地做

pip3 install flask

代替

pip install flask

然后小心始终使用python3intead of python


推荐阅读