Во-первых, я хотел бы сказать, что у меня есть исходный код, работающий с 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 ДЛЯ УСТАНОВКИ БИБЛИОТЕК