Sage: Open Source Mathematical Software
"Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, and MATLAB"
Copyright (C) 2005-2022 The Sage Development Team
The Sage Library is free software released under the GNU General Public Licence GPLv2+, and included packages have compatible software licenses. Over 800 people have contributed code to Sage. In many cases, documentation for modules and functions list the authors.
The Sage Installation Guide provides a decision tree that guides you to the type of installation that will work best for you.
If you have already cloned the git repository or downloaded the sources in the form of a tarball, please read the self-contained instructions below on how to build Sage and work around common issues.
Sage attempts to support all major Linux distributions, recent versions of macOS, and Windows (using Windows Subsystem for Linux, Cygwin, or virtualization).
Detailed information on supported platforms for a specific version of Sage can be found in the section "Availability and installation help" of the release tour for this version.
We highly appreciate contributions to Sage that fix portability bugs and help port Sage to new platforms; let us know at the sage-devel mailing list.
[Windows] Preparing the Platform
The preferred way to run Sage on Windows is using the Windows Subsystem for Linux, which allows you to install a standard Linux distribution such as Ubuntu within your Windows. Then all instructions for installation in Linux apply.
As an alternative, you can also run Linux on Windows using Docker (see above) or other virtualization solutions.
Finally, Sage also works on the 64-bit version of
Cygwin <https://cygwin.com/>_. If you wish to use Cygwin, use the following
instructions to get started.
Download cygwin64 (do not get the 32-bit version; it is not supported by Sage).
setup-x86_64.exegraphical installer. Pick the default options in most cases. At the package selection screen, use the search bar to find and select at least the following packages:
Start the Cygwin terminal and ensure you get a working bash prompt.
Make sure the path of your Cygwin home directory does not contain space characters.
By default, your username in Cygwin is the same as your username in Windows. This might contain spaces and other traditionally non-UNIX-friendly characters, e.g., if it is your full name. You can check this as follows:
$ whoami Erik M. Bray
This means your default home directory on Cygwin contains this username verbatim; in the above example,
/home/Erik M. Bray. It will save some potential trouble if you change your Cygwin home directory to contain only alphanumeric characters, for example,
/home/embray. The easiest way to do this is to first create the home directory you want to use instead, then create an
/etc/passwdfile specifying that directory as your home, as follows:
$ whocanibe=embray $ mkdir /home/$whocanibe $ mkpasswd.exe -l -u "$(whoami)" | sed -r 's,/home/[^:]+,/home/'$whocanibe, > /etc/passwd
After this, close all Cygwin terminals (ensure nothing in
C:\cygwin64is running), then start a new Cygwin terminal and your home directory should have moved.
There are other ways to do this, but the above seems to be the simplest that's still supported.
Install the package manager
$ curl -OL https://rawgit.com/transcode-open/apt-cyg/master/apt-cyg $ install apt-cyg /usr/local/bin $ rm -f apt-cyg
[macOS] Preparing the Platform
If your Mac uses the Apple Silicon (M1, arm64) architecture:
If you set up your Mac by transfering files from an older Mac, make sure that the directory
/usr/localdoes not contain an old copy of Homebrew (or other software) for the x86_64 architecture that you may have copied over. Note that Homebrew for the M1 is installed in
If you wish to use conda, please see the section on conda in the Sage Installation Manual for guidance.
Otherwise, using Homebrew ("the missing package manager for macOS") from https://brew.sh/ required because it provides a version of
gfortranwith necessary changes for this platform that are not in a released upstream version of GCC. (The
gfortranpackage that comes with the Sage distribution is not suitable for the M1.)
If your Mac uses the Intel (x86_64) architecture:
If you wish to use conda, please see the section on conda in the Sage Installation Manual for guidance.
Otherwise, we strongly recommend to use Homebrew ("the missing package manager for macOS") from https://brew.sh/, which provides the
gfortrancompiler and many libraries.
Otherwise, if you do not wish to install Homebrew, you will need to install the latest version of Xcode Command Line Tools. Open a terminal window and run
xcode-select --install; then click "Install" in the pop-up window. If the Xcode Command Line Tools are already installed, you may want to check if they need to be updated by typing
Instructions to Build from Source
Like many other software packages, Sage is built from source using
./configure, followed by
make. However, we strongly recommend to
read the following step-by-step instructions for building Sage.
The instructions cover all of Linux, macOS, and Cygwin.
More details, providing a background for these instructions, can be found in the section "Install from Source Code". in the Installation Guide.
Decide on the source/build directory (
On personal computers, any subdirectory of your :envvar:
HOMEdirectory should do.
For example, you could use
SAGE_ROOT=~/sage/sage-x.y, which we will use as the running example below, where
x.yis the current Sage version.
You need at least 10 GB of free disk space.
The full path to the source directory must contain no spaces.
After starting the build, you cannot move the source/build directory without breaking things.
You may want to avoid slow filesystems such as network file systems (NFS) and the like.
[macOS] macOS allows changing directories without using exact capitalization. Beware of this convenience when compiling for macOS. Ignoring exact capitalization when changing into :envvar:
SAGE_ROOTcan lead to build errors for dependencies requiring exact capitalization in path names.
[Cygwin] Avoid building in home directories of Windows domain users or in paths with capital letters.
Download/unpack or clone the sources.
Go to https://www.sagemath.org/download-source.html, select a mirror, and download the file :file:
This compressed archive file contains the source code for Sage and the source for all programs on which Sage depends.
After downloading the source tarball
$ cd ~/sage/ $ tar xf sage-x.y.tar.gz # adapt x.y; takes a while
This creates the subdirectory
sage-x.y. Now change into it:
$ cd sage-x.y/ # adapt x.y
[Git] Alternatively, and required for Sage development, clone the Sage git repository:
$ ORIG=https://github.com/sagemath/sage.git $ git clone -c core.symlinks=true --branch develop --tags $ORIG
This will create the directory
sage. (See the section Setting up git and the following sections in the Sage Developer's Guide for more information.)
Change into it and pick the branch you need, typically the latest development branch:
$ cd sage $ git checkout develop
[Windows] The Sage source tree contains symbolic links, and the build will not work if Windows line endings rather than UNIX line endings are used.
Therefore it is crucial that you unpack the source tree from the Cygwin (or WSL)
bashusing the Cygwin (or WSL)
tarutility and not using other Windows tools (including mingw). Likewise, when using
git, it is recommended (but not necessary) to use the Cygwin (or WSL) version of
[Linux, Cygwin] Install the required minimal build prerequisites.
g++(a recent enough matching set of these three will avoid building Sage-specific compilers). See the Installation Manual for a discussion of suitable compilers.
Build tools: GNU
Python 3.4 or later, or Python 2.7, a full installation including
urllib; but ideally version 3.7.x, 3.8.x, 3.9.x, or 3.10.x, which will avoid having to build Sage's own copy of Python 3.
We have collected lists of system packages that provide these build prerequisites. See, in the folder build/pkgs/_prereq/distros, the files arch.txt, cygwin.txt, debian.txt (also for Ubuntu, Linux Mint, etc.), fedora.txt (also for Red Hat, CentOS), opensuse.txt, slackware.txt, and void.txt, or visit https://doc.sagemath.org/html/en/reference/spkg/_prereq.html#spkg-prereq
[Git] If you plan to work with ticket branches that make changes to packages, install the bootstrapping prerequisites. See the files in the folder build/pkgs/_bootstrap/distros, or visit https://doc.sagemath.org/html/en/reference/spkg/_bootstrap.html#spkg-bootstrap
[Git] If you cloned the Sage repository using
git, bootstrap the source tree using the following command:
$ make configure
(If the bootstrapping prerequisites are not installed, this command will download a package providing pre-built bootstrap output instead.)
Optionally, decide on the installation prefix (
Traditionally, and by default, Sage is installed into the subdirectory hierarchy rooted at
This can be changed using
./configure --prefix=SAGE_LOCAL, where
SAGE_LOCALis the desired installation prefix, which must be writable by the user.
Note that in Sage's build process,
makebuilds and installs (
make installis a no-op). Therefore the installation hierarchy must be writable by the user.
See the installation manual for options if you want to install into shared locations such as
/usr/local/. Do not attempt to build Sage as
Optional: It is recommended that you have both LaTeX and the ImageMagick tools (e.g. the "convert" command) installed since some plotting functionality benefits from them.
Optionally, review the configuration options, which includes many optional packages:
$ ./configure --help
Some notable options for Sage developers are the following:
./configure --enable-editableto configure the Sage distribution to install the Sage library in "develop" ("editable", "in-place") mode instead of using the Sage library's custom incremental build system.
It has the benefit that to try out changes to Python files, one does not need to run
./sage -bany more; restarting Sage is enough. It may also have benefits in certain develop environments that get confused by sagelib's custom build system.
Note that in an editable install, the source directory will be cluttered with build artifacts (but they are
.gitignored). This is normal.
./configure --enable-download-from-upstream-urlto allow downloading packages from their upstream URL if they cannot (yet) be found on the Sage mirrors. This is useful for trying out ticket branches that make package upgrades.
Optional, but highly recommended: Set some environment variables to customize the build.
For example, the
MAKEenvironment variable controls whether to run several jobs in parallel. On a machine with 4 processors, say, typing
export MAKE="make -j4"will configure the build script to perform a parallel compilation of Sage using 4 jobs. On some powerful machines, you might even consider
-j16, as building with more jobs than CPU cores can speed things up further.
To reduce the terminal output during the build, type
export V=0. (
Vstands for "verbosity".)
Some environment variables deserve a special mention:
FC. These variables defining your compilers can be set at configuration time and their values will be recorded for further use at build time and runtime.
For an in-depth discussion of more environment variables for building Sage, see the installation guide.
./configure, followed by any options that you wish to use. For example, to build Sage with
gf2xpackage supplied by Sage, use
At the end of a successful
./configurerun, you may see messages recommending to install extra system packages using your package manager.
For a large list of Sage packages, Sage is able to detect whether an installed system package is suitable for use with Sage; in that case, Sage will not build another copy from source.
Sometimes, the messages will recommend to install packages that are already installed on your system. See the earlier configure messages or the file
config.logfor explanation. Also, the messages may recommend to install packages that are actually not available; only the most recent releases of your distribution will have all of these recommended packages.
Optional: If you choose to install the additional system packages, a re-run of
./configurewill test whether the versions installed are usable for Sage; if they are, this will reduce the compilation time and disk space needed by Sage. The usage of packages may be adjusted by
./configureparameters (check again the output of
make. That's it! Everything is automatic and non-interactive.
If you followed the above instructions, in particular regarding the installation of system packages recommended by the output of
./configure(step 10), and regarding the parallel build (step 9), building Sage takes less than one hour on a modern computer. (Otherwise, it can take much longer.)
The build should work fine on all fully supported platforms. If it does not, we want to know!
./sageto try it out. In Sage, try for example
2 + 2,
plot3d(lambda x, y: x*y, (-1, 1), (-1, 1))to test a simple computation and plotting in 2D and 3D. Type Ctrl+D or
quitto quit Sage.
make ptestlongto test all examples in the documentation (over 200,000 lines of input!) -- this takes from 10 minutes to several hours. Don't get too disturbed if there are 2 to 3 failures, but always feel free to email the section of
logs/ptestlong.logthat contains errors to the sage-support mailing list. If there are numerous failures, there was a serious problem with your build.
The HTML version of the documentation is built during the compilation process of Sage and resides in the directory
local/share/doc/sage/html/. You may want to bookmark it in your browser.
Optional: If you want to build the PDF version of the documentation, run
make doc-pdf(this requires LaTeX to be installed).
Optional: Install optional packages of interest to you: get a list by typing
./sage --optionalor by visiting the packages documentation page.
Optional: Create a symlink to the
sageexecutable somewhere in your
PATH, so you can start Sage by typing
sagefrom anywhere rather than having to either type the full path or navigate to the Sage directory and type
./sage. This can be done by running:
$ ln -s $HOME/sage/sage-x.y/sage /usr/local/bin
$HOME/sage/sage-x.y/part may need adapting. One way to decide how to adapt it is to run
print(SAGE_ROOT)in a Sage session.
If you have problems building Sage, check the Sage Installation Guide, as well as the version-specific Sage Installation FAQ in the Sage Release Tour corresponding to the version that you are installing.
Please do not hesitate to ask for help in the SageMath forum or the sage-support mailing list. The Troubleshooting section in the Sage Installation Guide provides instructions on what information to provide so that we can provide help more effectively.
Contributing to Sage
If you'd like to contribute to Sage, we strongly recommend that you read the Developer's Guide.
Sage has significant components written in the following languages: C/C++, Python, Cython, Common Lisp, Fortran, and a bit of Perl.
Simplified directory layout (only essential files/directories):
SAGE_ROOT Root directory (sage-x.y in Sage tarball) ├── build │ └── pkgs Every package is a subdirectory here │ ├── 4ti2/ │ … │ └── zn_poly/ ├── configure Top-level configure script ├── COPYING.txt Copyright information ├── pkgs Source trees of Python distribution packages │ ├── sage-conf │ │ ├── sage_conf.py │ │ └── setup.py │ ├── sage-docbuild │ │ ├── sage_docbuild/ │ │ └── setup.py │ ├── sage-setup │ │ ├── sage_setup/ │ │ └── setup.py │ ├── sage-sws2rst │ │ ├── sage_sws2rst/ │ │ └── setup.py │ └── sagemath-standard │ ├── bin/ │ ├── sage -> ../../src/sage │ └── setup.py ├── local (SAGE_LOCAL) Installation hierarchy for non-Python packages │ ├── bin Executables │ ├── include C/C++ headers │ ├── lib Shared libraries, architecture-dependent data │ ├── share Databases, architecture-independent data, docs │ │ └── doc Viewable docs of Sage and of some components │ └── var │ ├── lib/sage │ │ ├── installed/ │ │ │ Records of installed non-Python packages │ │ ├── scripts/ Scripts for uninstalling installed packages │ │ └── venv-python3.9 (SAGE_VENV) │ │ │ Installation hierarchy (virtual environment) │ │ │ for Python packages │ │ ├── bin/ Executables and installed scripts │ │ ├── lib/python3.9/site-packages/ │ │ │ Python modules/packages are installed here │ │ └── var/lib/sage/ │ │ └── wheels/ │ │ Python wheels for all installed Python packages │ │ │ └── tmp/sage/ Temporary files when building Sage ├── logs │ ├── install.log Full install log │ └── pkgs Build logs of individual packages │ ├── alabaster-0.7.12.log │ … │ └── zn_poly-0.9.2.log ├── m4 M4 macros for generating the configure script │ └── *.m4 ├── Makefile Running "make" uses this file ├── prefix -> SAGE_LOCAL Convenience symlink to the installation tree ├── README.md This file ├── sage Script to start Sage ├── src Monolithic Sage library source tree │ ├── bin/ Scripts that Sage uses internally │ ├── doc/ Sage documentation sources │ └── sage/ The Sage library source code ├── upstream Source tarballs of packages │ ├── Babel-2.9.1.tar.gz │ … │ └── zn_poly-0.9.2.tar.gz ├── venv -> SAGE_VENV Convenience symlink to the virtual environment └── VERSION.txt
For more details see our Developer's Guide.
This is a brief summary of the Sage software distribution's build system. There are two components to the full Sage system--the Sage Python library and its associated user interfaces, and the larger software distribution of Sage's main dependencies (for those dependencies not supplied by the user's system).
Sage's Python library is built and installed using a
setup.py script as is
standard for Python packages (Sage's
setup.py is non-trivial, but not
Most of the rest of the build system is concerned with building all of Sage's
dependencies in the correct order in relation to each other. The dependencies
included by Sage are referred to as SPKGs (i.e. "Sage Packages") and are listed
The main entrypoint to Sage's build system is the top-level
Makefile at the
root of the source tree. Unlike most normal projects that use autoconf (Sage
does as well, as described below), this
Makefile is not generated. Instead,
it contains a few high-level targets and targets related to bootstrapping the
system. Nonetheless, we still run
make <target> from the root of the source
tree--targets not explicitly defined in the top-level
Makefile are passed
through to another Makefile under
build/make/Makefile is generated by an autoconf-generated
configure script, using the template in
includes rules for building the Sage library itself (
make sagelib), and for
building and installing each of Sage's dependencies (e.g.
configure script itself, if it is not already built, can be generated by
bootstrap script (the latter requires GNU autotools being installed).
Makefile also takes care of this automatically.
To summarize, running a command like
make python3 at the top-level of the
source tree goes something like this:
./configurewith any previously configured options if
- change directory into
build/makeand run the
installscript--this is little more than a front-end to running
make -f build/make/Makefile python3, which sets some necessary environment variables and logs some information
build/make/Makefilecontains the actual rule for building
python3; this includes building all of
python3's dependencies first (and their dependencies, recursively); the actual package installation is performed with the
It is not supported to move the
after building Sage. If you do move the directories, you will have to
build Sage again from scratch.
If you copy the
sage script or make a symbolic link to it, you
should modify the script to reflect this (as instructed at the top of
the script). It is important that the path to Sage does not have any
spaces and non-ASCII characters in it.
For a system-wide installation, you have to build Sage as a "normal" user and then as root you can change permissions. Afterwards, you need to start up Sage as root at least once prior to using the system-wide Sage as a normal user. See the Installation Guide for further information.
Your local Sage install is almost exactly the same as any "developer" install. You can make changes to documentation, source, etc., and very easily package the complete results up for redistribution just like we do.
To make a binary distribution with your currently installed packages, visit sagemath/binary-pkg.
To make your own source tarball of Sage, type:
$ make dist
The result is placed in the directory
Changes to Included Software
All software included with Sage is copyrighted by the respective authors and released under an open source license that is GPL version 3 or later compatible. See COPYING.txt for more details.
Sources are in unmodified (as far as possible) tarballs in the
upstream/ directory. The remaining description, version
information, patches, and build scripts are in the accompanying
build/pkgs/<packagename> directory. This directory is
part of the Sage git repository.