sage-10.9 is now live on pypi:
In 45 seconds you can go from nothing to having sage-10.9 and deps installed and usable in your python environment:
~$ time pip3 install sagelite --user --break-system-packages
Collecting sagelite
Downloading sagelite-10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (33 kB)
Collecting conway-polynomials>=0.8 (from sagelite)
Using cached conway_polynomials-0.10-py3-none-any.whl.metadata (4.1 kB)
Collecting six>=1.15.0 (from sagelite)
Using cached six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting cysignals>=1.12.1 (from sagelite)
Downloading cysignals-1.12.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (12 kB)
Collecting cython>=3.1.0 (from sagelite)
Downloading cython-3.2.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (7.1 kB)
Collecting fpylll>=0.5.9 (from sagelite)
Downloading fpylll-0.6.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (11 kB)
Collecting gmpy2>=2.1.5 (from sagelite)
Downloading gmpy2-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.5 kB)
Requirement already satisfied: ipykernel>=5.2.1 in /usr/lib/python3/dist-packages (from sagelite) (7.1.0)
Requirement already satisfied: ipython>=8.9.0 in /usr/lib/python3/dist-packages (from sagelite) (9.11.0)
Requirement already satisfied: ipywidgets>=7.5.1 in /usr/lib/python3/dist-packages (from sagelite) (8.1.5)
Requirement already satisfied: jupyter-client in /usr/lib/python3/dist-packages (from sagelite) (8.7.0)
Requirement already satisfied: matplotlib>=3.7.0 in /usr/lib/python3/dist-packages (from sagelite) (3.10.7+dfsg1)
Collecting memory_allocator (from sagelite)
Downloading memory_allocator-0.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (1.8 kB)
Requirement already satisfied: mpmath>=1.1.0 in /usr/lib/python3/dist-packages (from sagelite) (1.3.0)
Collecting networkx>=3.1 (from sagelite)
Using cached networkx-3.6.1-py3-none-any.whl.metadata (6.8 kB)
Requirement already satisfied: numpy>=1.25 in /usr/lib/python3/dist-packages (from sagelite) (2.3.5)
Requirement already satisfied: pexpect>=4.8.0 in /usr/lib/python3/dist-packages (from sagelite) (4.9.0)
Requirement already satisfied: pillow>=7.2.0 in /usr/lib/python3/dist-packages (from sagelite) (12.1.1)
Requirement already satisfied: platformdirs in /usr/lib/python3/dist-packages (from sagelite) (4.9.4)
Collecting pplpy>=0.8.6 (from sagelite)
Downloading pplpy-0.9.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (4.6 kB)
Collecting primecountpy (from sagelite)
Downloading primecountpy-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (22 kB)
Requirement already satisfied: ptyprocess>0.5 in /usr/lib/python3/dist-packages (from sagelite) (0.7.0)
Requirement already satisfied: requests>=2.13.0 in /usr/lib/python3/dist-packages (from sagelite) (2.32.5)
Collecting scipy>=1.11 (from sagelite)
Downloading scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (62 kB)
Collecting sphinx>=6.2 (from sagelite)
Using cached sphinx-9.1.0-py3-none-any.whl.metadata (5.8 kB)
Requirement already satisfied: sympy<2.0,>=1.6 in /usr/lib/python3/dist-packages (from sagelite) (1.14.0)
Collecting pkgconfig (from sagelite)
Using cached pkgconfig-1.6.0-py3-none-any.whl.metadata (4.9 kB)
Requirement already satisfied: traitlets in /usr/lib/python3/dist-packages (from sagelite) (5.14.3)
Requirement already satisfied: comm>=0.1.1 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (0.2.1)
Requirement already satisfied: debugpy>=1.6.5 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (1.8.19)
Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (5.9.1)
Requirement already satisfied: matplotlib-inline>=0.1 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (0.2.1)
Requirement already satisfied: nest-asyncio>=1.4 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (1.6.0)
Requirement already satisfied: packaging>=22 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (26.0)
Requirement already satisfied: psutil>=5.7 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (7.1.0)
Requirement already satisfied: pyzmq>=25 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (27.1.0)
Requirement already satisfied: tornado>=6.2 in /usr/lib/python3/dist-packages (from ipykernel>=5.2.1->sagelite) (6.5.4)
Requirement already satisfied: decorator>=5.1.0 in /usr/lib/python3/dist-packages (from ipython>=8.9.0->sagelite) (5.2.1)
Requirement already satisfied: ipython-pygments-lexers>=1.0.0 in /usr/lib/python3/dist-packages (from ipython>=8.9.0->sagelite) (1.1.1)
Requirement already satisfied: jedi>=0.18.2 in /usr/lib/python3/dist-packages (from ipython>=8.9.0->sagelite) (0.19.1)
Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /usr/lib/python3/dist-packages (from ipython>=8.9.0->sagelite) (3.0.52)
Requirement already satisfied: pygments>=2.14.0 in /usr/lib/python3/dist-packages (from ipython>=8.9.0->sagelite) (2.19.2)
Requirement already satisfied: stack_data>=0.6.0 in /usr/lib/python3/dist-packages (from ipython>=8.9.0->sagelite) (0.6.3)
Requirement already satisfied: wcwidth in /usr/lib/python3/dist-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=8.9.0->sagelite) (0.2.14)
Requirement already satisfied: widgetsnbextension~=4.0.12 in /usr/lib/python3/dist-packages (from ipywidgets>=7.5.1->sagelite) (4.0.13)
Requirement already satisfied: jupyterlab_widgets~=3.0.12 in /usr/lib/python3/dist-packages (from ipywidgets>=7.5.1->sagelite) (3.0.13)
Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/lib/python3/dist-packages (from jedi>=0.18.2->ipython>=8.9.0->sagelite) (0.8.5)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/lib/python3/dist-packages (from jupyter-client->sagelite) (2.9.0)
Requirement already satisfied: contourpy>=1.0.1 in /usr/lib/python3/dist-packages (from matplotlib>=3.7.0->sagelite) (1.3.3)
Requirement already satisfied: cycler>=0.10 in /usr/lib/python3/dist-packages (from matplotlib>=3.7.0->sagelite) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/lib/python3/dist-packages (from matplotlib>=3.7.0->sagelite) (4.61.1)
Requirement already satisfied: kiwisolver>=1.3.1 in /usr/lib/python3/dist-packages (from matplotlib>=3.7.0->sagelite) (1.4.10rc0)
Requirement already satisfied: pyparsing>=3 in /usr/lib/python3/dist-packages (from matplotlib>=3.7.0->sagelite) (3.3.2)
Requirement already satisfied: chardet>=3.0.2 in /usr/lib/python3/dist-packages (from requests>=2.13.0->sagelite) (5.2.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests>=2.13.0->sagelite) (3.11)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/lib/python3/dist-packages (from requests>=2.13.0->sagelite) (2.6.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests>=2.13.0->sagelite) (2026.1.4)
Collecting sphinxcontrib-applehelp>=1.0.7 (from sphinx>=6.2->sagelite)
Using cached sphinxcontrib_applehelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-devhelp>=1.0.6 (from sphinx>=6.2->sagelite)
Using cached sphinxcontrib_devhelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-htmlhelp>=2.0.6 (from sphinx>=6.2->sagelite)
Using cached sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-jsmath>=1.0.1 (from sphinx>=6.2->sagelite)
Using cached sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting sphinxcontrib-qthelp>=1.0.6 (from sphinx>=6.2->sagelite)
Using cached sphinxcontrib_qthelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-serializinghtml>=1.1.9 (from sphinx>=6.2->sagelite)
Using cached sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl.metadata (2.4 kB)
Requirement already satisfied: Jinja2>=3.1 in /usr/lib/python3/dist-packages (from sphinx>=6.2->sagelite) (3.1.6)
Collecting docutils<0.23,>=0.21 (from sphinx>=6.2->sagelite)
Using cached docutils-0.22.4-py3-none-any.whl.metadata (15 kB)
Collecting snowballstemmer>=2.2 (from sphinx>=6.2->sagelite)
Downloading snowballstemmer-3.1.0-py3-none-any.whl.metadata (7.8 kB)
Requirement already satisfied: babel>=2.13 in /usr/lib/python3/dist-packages (from sphinx>=6.2->sagelite) (2.17.0)
Collecting alabaster>=0.7.14 (from sphinx>=6.2->sagelite)
Using cached alabaster-1.0.0-py3-none-any.whl.metadata (2.8 kB)
Collecting imagesize>=1.3 (from sphinx>=6.2->sagelite)
Using cached imagesize-2.0.0-py2.py3-none-any.whl.metadata (1.5 kB)
Collecting roman-numerals>=1.0.0 (from sphinx>=6.2->sagelite)
Using cached roman_numerals-4.1.0-py3-none-any.whl.metadata (3.3 kB)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/lib/python3/dist-packages (from Jinja2>=3.1->sphinx>=6.2->sagelite) (3.0.3)
Requirement already satisfied: executing>=1.2.0 in /usr/lib/python3/dist-packages (from stack_data>=0.6.0->ipython>=8.9.0->sagelite) (2.2.1)
Requirement already satisfied: asttokens>=2.1.0 in /usr/lib/python3/dist-packages (from stack_data>=0.6.0->ipython>=8.9.0->sagelite) (3.0.1)
Requirement already satisfied: pure_eval in /usr/lib/python3/dist-packages (from stack_data>=0.6.0->ipython>=8.9.0->sagelite) (0.2.3)
Downloading sagelite-10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (187.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 187.9/187.9 MB 9.5 MB/s eta 0:00:00
Using cached conway_polynomials-0.10-py3-none-any.whl (212 kB)
Downloading cysignals-1.12.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (269 kB)
Downloading cython-3.2.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 69.8 MB/s eta 0:00:00
Downloading fpylll-0.6.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (41.5 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.5/41.5 MB 18.0 MB/s eta 0:00:00
Downloading gmpy2-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 89.9 MB/s eta 0:00:00
Using cached networkx-3.6.1-py3-none-any.whl (2.1 MB)
Downloading pplpy-0.9.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (3.5 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5/3.5 MB 4.0 MB/s eta 0:00:00
Downloading scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (35.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 35.2/35.2 MB 111.3 MB/s eta 0:00:00
Using cached six-1.17.0-py2.py3-none-any.whl (11 kB)
Using cached sphinx-9.1.0-py3-none-any.whl (3.9 MB)
Using cached docutils-0.22.4-py3-none-any.whl (633 kB)
Using cached alabaster-1.0.0-py3-none-any.whl (13 kB)
Using cached imagesize-2.0.0-py2.py3-none-any.whl (9.4 kB)
Using cached roman_numerals-4.1.0-py3-none-any.whl (7.7 kB)
Downloading snowballstemmer-3.1.0-py3-none-any.whl (104 kB)
Using cached sphinxcontrib_applehelp-2.0.0-py3-none-any.whl (119 kB)
Using cached sphinxcontrib_devhelp-2.0.0-py3-none-any.whl (82 kB)
Using cached sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl (98 kB)
Using cached sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB)
Using cached sphinxcontrib_qthelp-2.0.0-py3-none-any.whl (88 kB)
Using cached sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl (92 kB)
Downloading memory_allocator-0.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (77 kB)
Using cached pkgconfig-1.6.0-py3-none-any.whl (7.1 kB)
Downloading primecountpy-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (530 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 530.3/530.3 kB 35.8 MB/s eta 0:00:00
Installing collected packages: fpylll, sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, snowballstemmer, six, scipy, roman-numerals, pkgconfig, networkx, memory_allocator, imagesize, gmpy2, docutils, cython, cysignals, conway-polynomials, alabaster, sphinx, primecountpy, pplpy, sagelite
Successfully installed alabaster-1.0.0 conway-polynomials-0.10 cysignals-1.12.6 cython-3.2.5 docutils-0.22.4 fpylll-0.6.4 gmpy2-2.3.0 imagesize-2.0.0 memory_allocator-0.2.0 networkx-3.6.1 pkgconfig-1.6.0 pplpy-0.9.0 primecountpy-0.2.1 roman-numerals-4.1.0 sagelite-10.9 scipy-1.17.1 six-1.17.0 snowballstemmer-3.1.0 sphinx-9.1.0 sphinxcontrib-applehelp-2.0.0 sphinxcontrib-devhelp-2.0.0 sphinxcontrib-htmlhelp-2.1.0 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-2.0.0 sphinxcontrib-serializinghtml-2.0.0
real 0m44.784s
user 0m16.130s
sys 0m4.061s
~$ python3
Python 3.14.3 (main, Mar 28 2026, 06:06:58) [GCC 15.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sage.all
>>> sage.all.factor(2026)
2 * 1013
>>> sage.all.EllipticCurve([1,2,3,4,5])
Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field
>>>
~$ sage
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 10.9, Release Date: 2026-05-04 │
│ Using Python 3.14.3. Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
sage:
~$ which sage
/home/user/.local/bin/sage
~$ sage
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 10.9, Release Date: 2026-05-04 │
│ Using Python 3.14.3. Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
sage:
~$