Connexion 3.0 ModuleNotFoundError: Please install connexion using the flask extra
Install Connexion with the explicit Flask extra: pip install 'connexion[flask]' or pip install 'connexion[flask,swagger-ui]'.
Root Cause Analysis
This error occurs when Python imports connexion.FlaskApp in Connexion 3.0+, but Connexion was installed as a standalone package (pip install connexion) without the optional flask extra dependencies.
1. Architectural Changes in Connexion 3.0 (ASGI / Starlette Shift)
Prior to version 3.0, Connexion was tightly coupled to Flask by default. In Connexion 3.0, the core architecture was completely rewritten as an ASGI application framework based on Starlette, making Flask an optional compatibility wrapper.
2. Decoupled Extra Dependencies in modern packaging
Because Flask is no longer a mandatory dependency of the Connexion core engine, running pip install connexion installs only the ASGI core. Attempting to import from connexion import FlaskApp triggers an explicit ModuleNotFoundError: Please install connexion using the 'flask' extra.
3. Upgrading Legacy Projects Without Updating requirements.txt
Projects upgrading from Connexion 2.x to 3.x that leave connexion unpinned in requirements.txt will pull the new version and break existing Flask applications.
4. Swagger UI Extra Separation
Similarly, Swagger UI static assets were separated into connexion[swagger-ui] in version 3.0.
Reproduction Code (MCVE)
# **Note de reproductibilité :** Dépend de la gestion des extras du paquet.
raise ModuleNotFoundError("Please install connexion using the 'flask' extra: pip install 'connexion[flask]'")
Solution 1: Install Connexion with Flask Extra via pip
Update your installation command and requirements.txt to include the [flask] extra specification.
import sys
print(f'Active Python: {sys.version}')
print('Run in terminal to install Connexion with Flask support:')
print('pip install "connexion[flask,swagger-ui]"')
Solution 2: Migrate to Native Connexion 3.0 Async ASGI App
If starting a new project, use Connexion's native ASGI AsyncApp directly without requiring the Flask extra.
print('Native Connexion 3.0 ASGI Application Pattern:')
print('import connexion')
print('app = connexion.AsyncApp(__name__, specification_dir="spec/")')
print('app.add_api("openapi.yaml")')
A common mistake is installing pip install flask connexion separately instead of pip install 'connexion[flask]'. While this installs Flask, it may miss specific adapter versions required by Connexion's internal ASGI-to-WSGI bridges. Always use the square bracket syntax 'connexion[flask]'. Edge cases occur in pyproject.toml / poetry configurations: define dependencies as connexion = {version = '^3.0', extras = ['flask', 'swagger-ui']}. Contrast this error with ModuleNotFoundError: No module named 'flask', which indicates that Flask itself is missing.