Flask не находит применения в Raspberry Pi - PullRequest
0 голосов
/ 31 января 2020

Во-первых, я хотел бы сказать, что у меня есть исходный код, работающий с flask на MacOS и Windows 10 (различные люди разрабатывают сайт). Мы хотим запустить наш исходный код в Raspberry Pi 3 B +. Я установил flask и python на RPI. Вот подробности:

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. (Я пытался обновить python и flask на RPI несколько раз, и он всегда устанавливался бы одинаково)

В этом случае версии отменяются, я создал произвольный файл python в RPI:

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

Запускает сервер flask на локальном узле 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 (как я это делаю на P C). Если Raspberry Pi не потребуется другая структура, я не понимаю, почему он работает на MacOS и Windows 10, а не на RPI.

Я искал в документации Flask (я также пытался [https://flask.palletsprojects.com/en/1.1.x/tutorial/factory/] ) и inte rnet ничего не помогло.

Я даже пытался сделать:

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 flask ПУТЬ:

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

Это означает, что flask работает и модуль найден. Теперь это другая проблема. Любые идеи?

[Обновление]

Перепрошивка RASPIAN на SDCARD решена проблема. ИСПОЛЬЗУЙТЕ ТОЛЬКО PIP3 ДЛЯ УСТАНОВКИ БИБЛИОТЕК

1 Ответ

1 голос
/ 31 января 2020

Похоже, вы случайно смешали Python2 .7 и Python3 установку Flask, что, к сожалению, легко сделать. В вашей ситуации мне очень хочется переизобразить SD-карту с бесплатной sh копией Raspbian, а затем будьте скрупулезно делать

pip3 install flask

вместо

pip install flask

и будьте осторожны, всегда используйте python3 intead из python.

...