I have a flask restful project with the following layout (file names changed for convenience)
1
2
3
4
5
6
7
8
9
10myproject/
__init__.py
app.py
common/
__init__.py
util.py
foo/
__init__.py
main.py
utilities.py
1foo/
is just a folder containing code for one of the API endpoints, I’m planning to add others in the future, for this reason I have
1common/util.py
file which contains reusable functions that I will use with other API endpoints.
1foo/main.py
1
2
3
4
5
6
7from flask_restful import Resource, request
from utilities import Analysis
class Foo(Resource):
def get(self):
pass
in
1foo/utilities.py
I have classes with methods that get some data, I import those classes to
1foo/main.py
to return JSON response
classes in
1foo/utilities.py
also uses some functions from
1common/util.py
but when I try to import something from
1common/util.py
to
1foo/utilities.py
I get
1
2import common.util
ModuleNotFoundError: No module named 'common'
What could be causing this? I tried importing various ways:
1from common.util import my_func
1from .common.util import my_func
1from myproject.common.util import my_func
but none worked.
This is
1myproject/app.py
in case it matters:
1
2
3
4
5
6
7
8
9
10
11
12from flask import Flask
from flask_restful import Api
from foo.main import Foo
app = Flask(__name__)
api = Api(app)
api.add_resource(Foo, '/Foo')
if __name__ == "__main__":
app.run()
I’m doing all of this in activated virtualenv if it matters