Firstly I would like to say that I have the source code working with flask on MacOS and Windows 10 (various people are developing the site). We want to run our source code in the Raspberry Pi 3 B+. I have installed flask and python on RPI. Here are the details:
flask --version
Flask 0.12.1
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
The only difference between my MacOS is that Python is 3.7.5 and Flask is 1.0.2. (I tried to update python and flask on RPI multiple times and it would always install the same)
This is where the versions case negate, I made an arbitrary python file in 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
This runs the flask server on RPI's localhost no problem.
The problem is when I try to run the source code on RPI via:
export FLASK_APP=SmartLock
export FLASK_ENV=development
flask run
I get the following message:
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.
My structure
CSI4999
|
SmartLock
|
-static
-templates
__init__.py
other modules
I run the commands from inside CSI4999 (like I do on PC). Unless Raspberry Pi would require a different structure, I don't see why it runs on MacOS and Windows 10 and not on RPI.
I searched over the Flask Documentation (I also tried [https://flask.palletsprojects.com/en/1.1.x/tutorial/factory/]) and internet nothing helped.
I even tried to do:
python -m flask run
but that would return
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
Any input would greatly appreciated.
[Update:]
I have installed Python 3.7 and Flask 1.1 flask PATH is :
PATH:/usr/lib/python3/dist-packages/flask
pi@raspberrypi:~ $ flask --version
Python 3.7.5
Flask 1.1.1
Werkzeug 0.16.1
Inside pi@raspberrypi:~/Downloads/CSI4999/
FLASK_APP=SmartLock
flask run
returns:
* 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
Which means flask runs and module is found. Now this is another issue. Any Ideas?
[Update]
REFLASHING RASPIAN ON SDCARD SOLVED ISSUE. USE ONLY PIP3 TO INSTALL LIBRARIES
It looks like you may have accidentally intermingled a Python2.7 and a Python3 install of Flask, which is sadly easy to do. In your situation, I've be very tempted to reimage the SD card with a fresh copy of Raspbian, then be scrupulously careful to do
pip3 install flask
instead of
pip install flask
and then be careful to always use python3
intead of python
.