Is there an existing issue for this?
Is your feature request related to a problem? Please describe.
Sanic still uses setup.py to make sure that uvloop and ujson are installed as part of the default install (package sanic), as they increase performance significantly -- but while at the same time allowing one to disable each of them (e.g. to maintain pure Python implementation).
Unfortunately the extras system does not accommodate to this unless Sanic takes a similar approach as FastAPI who in their documentation tell people to install fastapi[standard] rather than the minimal package without extras. For this reason, Sanic has stuck with the setup.py system and environment variables to control the build, until now.
Describe the solution you'd like
The simple solution would be to make the sanic package require those optional deps. This will cause the packages be installed (can be disabled for specific platforms where they are simply not available). Additionally, implement runtime controls to disable the use of these.
Alternative solutions that I could think of is to maintain a separate sanic-minimal package without the deps, or to instruct users to install sanic[standard] like FastAPI does. Both are rather cumbersome, especially considering the existing userbase that depends on sanic.
I favor the solution presented in the first paragraph, as depending on the existing custom hacks on legacy setup.py install is becoming intolerable. E.g. uv sync needs the project build to be done via pyproject.toml.
Additional context
No response
Is there an existing issue for this?
Is your feature request related to a problem? Please describe.
Sanic still uses setup.py to make sure that uvloop and ujson are installed as part of the default install (package
sanic), as they increase performance significantly -- but while at the same time allowing one to disable each of them (e.g. to maintain pure Python implementation).Unfortunately the extras system does not accommodate to this unless Sanic takes a similar approach as FastAPI who in their documentation tell people to install
fastapi[standard]rather than the minimal package without extras. For this reason, Sanic has stuck with the setup.py system and environment variables to control the build, until now.Describe the solution you'd like
The simple solution would be to make the
sanicpackage require those optional deps. This will cause the packages be installed (can be disabled for specific platforms where they are simply not available). Additionally, implement runtime controls to disable the use of these.Alternative solutions that I could think of is to maintain a separate
sanic-minimalpackage without the deps, or to instruct users to installsanic[standard]like FastAPI does. Both are rather cumbersome, especially considering the existing userbase that depends onsanic.I favor the solution presented in the first paragraph, as depending on the existing custom hacks on legacy setup.py install is becoming intolerable. E.g.
uv syncneeds the project build to be done via pyproject.toml.Additional context
No response