Flask-AppBuilder
Flask-AppBuilder copied to clipboard
ModuleNotFoundError in `flask fab create-app` with python 3.12
According to pep 632 python 3.12 doesn't ship distutils anymore.
But distutils is still used in flask fab create-app.
Environment
python: 3.12
Flask-Appbuilder version: 4.3.7
Describe the expected results
flask fab create-app works as described in the documentation
Describe the actual results
flask fab create-app yields an error:
Traceback (most recent call last):
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/bin/flask", line 8, in <module>
sys.exit(main())
^^^^^^
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/flask/cli.py", line 1064, in main
cli.main()
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/click/core.py", line 1682, in invoke
cmd_name, cmd, args = self.resolve_command(ctx, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/click/core.py", line 1729, in resolve_command
cmd = self.get_command(ctx, cmd_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/flask/cli.py", line 566, in get_command
self._load_plugin_commands()
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/flask/cli.py", line 561, in _load_plugin_commands
self.add_command(ep.load(), ep.name)
^^^^^^^^^
File "/usr/local/Cellar/[email protected]/3.12.0/Frameworks/Python.framework/Versions/3.12/lib/python3.12/importlib/metadata/__init__.py", line 205, in load
module = import_module(match.group('module'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/Cellar/[email protected]/3.12.0/Frameworks/Python.framework/Versions/3.12/lib/python3.12/importlib/__init__.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1381, in _gcd_import
File "<frozen importlib._bootstrap>", line 1354, in _find_and_load
File "<frozen importlib._bootstrap>", line 1304, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1381, in _gcd_import
File "<frozen importlib._bootstrap>", line 1354, in _find_and_load
File "<frozen importlib._bootstrap>", line 1325, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 929, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 994, in exec_module
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/flask_appbuilder/__init__.py", line 5, in <module>
from .api import ModelRestApi # noqa: F401
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/flask_appbuilder/api/__init__.py", line 29, in <module>
from marshmallow_sqlalchemy.fields import Related, RelatedList
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/marshmallow_sqlalchemy/__init__.py", line 1, in <module>
from .schema import (
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/marshmallow_sqlalchemy/schema.py", line 6, in <module>
from .convert import ModelConverter
File "/Users/a206719281/eclipse-workspace/ocellus-ui-backend-src/.venv/lib/python3.12/site-packages/marshmallow_sqlalchemy/convert.py", line 4, in <module>
from distutils.version import LooseVersion
ModuleNotFoundError: No module named 'distutils'
Steps to reproduce
$ python3.12 -m venv .venv
$ . .venv/bin/activate
(.venv) $ python -mpip install flask-appbuilder
(.venv) $ flask fab create-app
Good to know, some work as to be done to add 3.10, 3.11 and 3.12 to CI and remove distutils.
FWIW as a workaround I've just added setuptools as a dependency in my project
Looks like this change: https://github.com/marshmallow-code/marshmallow-sqlalchemy/pull/435/files removed distutils dependency