others-how to solve 'ModuleNotFoundError: No module named' error when using python ?

1. Purpose

In this post, I would demo how to solve the following ModuleNotFoundError when using python:

PyDev console: starting.

import sys; print('Python %s on %s' % (sys.version, sys.platform))
sys.path.extend(['/Users/bswen/work/python/myutils'])

Python 3.7.6 (default, Jun 18 2020, 11:06:38) 
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
>>> import Flask
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'Flask'

2. The Environment

  • Python 3

3. Debug

3.1 The dependency installation verification

We have installed flask as follows:

➜  learn_flask git:(master) ✗ pip3 install flask         
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Requirement already satisfied: flask in /Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages (1.1.2)
Requirement already satisfied: Werkzeug>=0.15 in /Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages (from flask) (1.0.1)
Requirement already satisfied: click>=5.1 in /Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages (from flask) (7.1.2)
Requirement already satisfied: itsdangerous>=0.24 in /Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages (from flask) (1.1.0)
Requirement already satisfied: Jinja2>=2.10.1 in /Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages (from flask) (2.11.2)
Requirement already satisfied: MarkupSafe>=0.23 in /Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages (from Jinja2>=2.10.1->flask) (1.1.1)

3.2 The code that use the dependency

This is the python code that uses flask:

import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)

4. The solution

4.1 The reason

Because Flask has upgraded, the old import style can not work!

We should change from:

import Flask

To:

from flask import Flask

4.2 The solution code

We should change our code as follows:

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)

Now run it again, we get this:

/Users/bswen/.pyenv/versions/3.7.6/bin/python /Users/bswen/work/python/myutils/learn_flask/app1.py
 * Serving Flask app "app1" (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: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 717-204-539

It works!

6. Summary

In this post, we demonstrated how to solve the ‘ModuleNotFoundError: No module named xxx’ error in Python, we should check that the module was really installed correctly and you have correctly import the module. Thanks for your reading. Regards.