0

How to use FlaskCLi with flask application in a virtualenv

I created a folder called app and activated the virtualenv and created an app.py file with the following contents

from flask import Flask 
from flask_cli import FlaskCLI

app = Flask('hello')
FlaskCLI(app)

@app.cli.command()
def initdb():
    print ("Creating a database ")

then I used the command export FLASK_APP=app.py and then flask run but got the error

 * Serving Flask app 'hello.py' (lazy loading)
 * 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
Usage: flask run [OPTIONS]
Try 'flask run --help' for help.

Error: While importing 'hello', an ImportError was raised:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/cli.py", line 256, in locate_app
    __import__(module_name)
  File "/home/kali/Desktop/Hermes/hello.py", line 5, in <module>
    from flask_cli import FlaskCLI
ModuleNotFoundError: No module named 'flask_cli'

this is how i installed the package

pip3 install flask-cli   
Requirement already satisfied: flask-cli in ./lib/python3.9/site-packages (0.4.0)
Requirement already satisfied: click>=2.0 in ./lib/python3.9/site-packages (from flask-cli) (8.0.4)
Requirement already satisfied: Flask>=0.10 in ./lib/python3.9/site-packages (from flask-cli) (2.0.3)
Requirement already satisfied: Jinja2>=3.0 in ./lib/python3.9/site-packages (from Flask>=0.10->flask-cli) (3.0.3)
Requirement already satisfied: itsdangerous>=2.0 in ./lib/python3.9/site-packages (from Flask>=0.10->flask-cli) (2.1.0)
Requirement already satisfied: Werkzeug>=2.0 in ./lib/python3.9/site-packages (from Flask>=0.10->flask-cli) (2.0.3)
Requirement already satisfied: MarkupSafe>=2.0 in ./lib/python3.9/site-packages (from Jinja2>=3.0->Flask>=0.10->flask-cli) (2.1.0)

manuel
  • 23
  • 6
  • Are you sure you activated your virtualenv correctly? On your traceback the path for the flask installation is not in a virtualenv, but it is the system global. – nonDucor Feb 25 '22 at 10:06
  • I activated the virtualenv with `source bin/activate` – manuel Feb 25 '22 at 10:14

1 Answers1

0

The solution is pretty simple. I don't think you need flask-cli. Try something like the code snippet below, register blueprints, initiate and migrate DB and all sorts of stuff.

from flask.cli import FlaskGroup

app = Flask(__name__)
app.debug = True
cli = FlaskGroup(app)

@app.route('/')
def index():
  return 'Hello World!'

if __name__ == '__main__':
    cli()
Abhay
  • 46
  • 1
  • 9