FWIW, the source distribution of sagemath 10.4 (from pypy) is about 20M, 
see https://pypi.org/project/sagemath-standard/#files

We build the sagemath package for void linux from this source alone, 
obtaining a binary package of about 55M, see 
https://voidlinux.org/packages/?arch=x86_64&q=sagemath.

The binary package is compressed with zstd. It expands to 548M

$ du -sh /usr/lib/python3.12/site-packages/sage
548M /usr/lib/python3.12/site-packages/sage

of which 154M is cython debug information (I'm actually not sure if it's 
necessary to ship it):

$ du -sh /usr/lib/python3.12/site-packages/sage/cython_debug/
154M /usr/lib/python3.12/site-packages/sage/cython_debug/

This is what could be called "a monolithic sagelib". Everything else is 
external dependencies and they can be in separate packages.

Just as a point of comparision: scipy 1.14.1 source distribution is 59M 
(https://pypi.org/project/scipy/#files) and the binary package for void 
linux is 19M (https://voidlinux.org/packages/?arch=x86_64&q=python3-scipy).

Note, however, that some dependencies of sagemath are huge. For instance, 
gap 4.13.1 complete source is more than 500M, and our binary package for 
void linux is 209M (https://voidlinux.org/packages/?arch=x86_64&q=gap).

Maybe it's more useful to split off the big components of sagemath into 
separate packages (e.g. gap) than try to split sagemath in pieces. And this 
is partly already done!  Indeed gap packages for most distros are already 
available.

IMHO, the main difficulty with packaging sagemath for a distro is not 
"sagelib is monolithic" but rather that "sage-the-distro is too tightly 
coupled, almost monolithic". Indeed, sagelib is too rigid in the specific 
versions of dependencies it requires. This is a hard problem, but we are 
learning and getting better at this. However, building sagelib in isolation 
of sage-the-distro is not a clearly supported configuration and I think 
only a few distro packages really use it, no end users.


I think that sagemath without e.g. polynomial rings or without groups, etc. 
would no longer be sagemath. If one accepts this, it means pari, singular, 
gap, are hard dependencies of sagemath. And thus it seems the only 
reasonable way to offer binary wheels of sagemath on pypi is that there are 
corresponding pypi packages for pari, singular, gap. IOW, distribute a 
monolithic sagelib via pypi / do not distribute a monolithic 
sage-the-distro via pypi.


Best,
Gonzalo


On Tuesday, October 8, 2024 at 7:59:12 PM UTC-3 Nils Bruin wrote:

On Tuesday 8 October 2024 at 15:40:07 UTC-7 oscar.j....@gmail.com wrote:

> As you're pointing out, sage still fits within 10GB in source, so it 
looks like sagemath could just be one pypi package. 

I think that you have misunderstood the limits that Marc was referring 
to. The 100MB file limits means that a single project installer file 
should be less than 100MB. The 10GB project limit means that all 
installer files for each Python version and each OS for all versions 
of a project should not add up to more than 10GB. A single Sage 
installer file for one OS, Sage version and CPython version comes 
close to the total file size limit allowed for any project by default 
in PyPI. 

 
Thanks for the clarification. So Pypi is wholly unsuitable for distributing 
a monolithic sagelib. If we want sagelib distributed through pypi then it 
*has* to be chopped up in order to make it fit. Distributing sagelib 
through pypi sounds like a pretty good idea, given that pypi is the de 
facto standard for distributing python software. So it sounds like 
considerations for reuse in other projects might not even be so relevant 
for motivating modularization: we already need it to make sage fit onto 
pypi. But that might also change the consideration for how sagemath needs 
to be chopped up. For fitting onto pypi, it's sufficient it gets chopped up 
in roughly equal-sized parts that can be built separately, in some 
specified order.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/ab503f89-cb8b-400c-a34d-400f0d90fe32n%40googlegroups.com.

Reply via email to