Sage — математическое программное обеспечение с открытым исходным кодом, выпущенное под лицензией GNU General Public License GPLv2+ и включает пакеты с совместимыми лицензиями на программное обеспечение. Люди со всего мира внесли свой вклад в развитие Sage. Полная документация доступна в Интернете.
Те, кто нетерпелив, могут использовать готовый Sage, доступный в Интернете на любом из
без локальной установки. В противном случае читайте дальше.
Руководство по установке Sage представляет собой дерево решений, которое поможет вам выбрать тип установки, который подойдет вам лучше всего. Сюда входит сборка из исходного кода, получение Sage из менеджера пакетов, использование образа контейнера или использование Sage в облаке.
Этот README содержит автономные инструкции по сборке Sage из исходного кода. Для этого вам необходимо клонировать репозиторий git (как описано в этом README) или загрузить исходные коды в виде tar-архива.
Если у вас есть вопросы или возникли проблемы, не стесняйтесь обращаться по электронной почте в список рассылки службы поддержки sage или задавать вопросы на сайте вопросов и ответов Ask Sage.
Sage пытается поддерживать все основные дистрибутивы Linux, последние версии macOS и Windows (с использованием подсистемы Windows для Linux или виртуализации).
Подробную информацию о поддерживаемых платформах для конкретной версии Sage можно найти в разделе «Доступность и помощь по установке» обзора выпуска для этой версии.
Мы высоко ценим вклад в Sage, который исправляет ошибки переносимости и помогает портировать Sage на новые платформы; дайте нам знать в списке рассылки sage-devel.
Предпочтительный способ запуска Sage в Windows — использование подсистемы Windows для Linux (WSL). Следуйте официальному руководству по установке WSL, чтобы установить Ubuntu (или другой дистрибутив Linux). Убедитесь, что вы выделили WSL достаточно оперативной памяти; Известно, что 5 ГБ работают, а 2 ГБ может быть недостаточно для сборки Sage из исходного кода. Тогда все инструкции по установке в Linux применяются.
В качестве альтернативы вы также можете запустить Linux в Windows с помощью Docker (см. ниже) или других решений для виртуализации.
Если ваш Mac использует архитектуру Apple Silicon (M1, M2, M3, M4; Arm64) и вы настраиваете свой Mac путем переноса файлов со старого Mac, убедитесь, что каталог /usr/local
не содержит старой копии Homebrew. (или другое программное обеспечение) для архитектуры x86_64, которое вы, возможно, скопировали. Обратите внимание, что Homebrew для M1 устанавливается в /opt/homebrew
, а не в /usr/local
.
Если вы хотите использовать conda, обратитесь к разделу о conda в Руководстве по установке Sage.
В противном случае мы настоятельно рекомендуем использовать Homebrew («отсутствующий менеджер пакетов для macOS») с https://brew.sh/, который предоставляет компилятор gfortran
и множество библиотек.
В противном случае, если вы не хотите устанавливать Homebrew, вам потребуется установить последнюю версию инструментов командной строки Xcode. Откройте окно терминала и запустите xcode-select --install
; затем нажмите «Установить» во всплывающем окне. Если инструменты командной строки Xcode уже установлены, вы можете проверить, нужно ли их обновлять, набрав softwareupdate -l
.
Как и многие другие пакеты программного обеспечения, Sage собирается из исходного кода с использованием ./configure
, за которым следует make
. Однако мы настоятельно рекомендуем прочитать следующие пошаговые инструкции по сборке Sage.
Инструкции охватывают все Linux, macOS и WSL.
Более подробную информацию, лежащую в основе этих инструкций, можно найти в разделе «Установка из исходного кода» Руководства по установке.
Определите каталог исходного кода/сборки ( SAGE_ROOT
):
На персональных компьютерах подойдет любой подкаталог вашего каталога :envvar: HOME
.
Например, вы можете использовать SAGE_ROOT=~/sage/sage
, который мы будем использовать в качестве рабочего примера ниже.
Вам необходимо как минимум 10 ГБ свободного места на диске.
Полный путь к исходному каталогу не должен содержать пробелов .
После запуска сборки вы не можете переместить каталог исходного кода/сборки, не нарушив при этом ничего.
Возможно, вам следует избегать медленных файловых систем, таких как сетевые файловые системы (NFS) и т.п.
[macOS] macOS позволяет менять каталоги без использования точной капитализации. Остерегайтесь этого удобства при компиляции для macOS. Игнорирование точного использования заглавных букв при изменении на :envvar: SAGE_ROOT
может привести к ошибкам сборки для зависимостей, требующих точного использования заглавных букв в именах путей.
Клонируйте исходники с помощью git
:
Чтобы проверить доступность git
, откройте терминал и введите следующую команду в командной строке ( $
):
$ git --version
git version 2.42.0
Точная версия не имеет значения, но если эта команда выдает ошибку, установите git
с помощью менеджера пакетов, используя одну из этих команд:
$ sudo pacman -S git # on Arch Linux
$ sudo apt-get update && apt-get install git # on Debian/Ubuntu
$ sudo yum install git # on Fedora/Redhat/CentOS
$ sudo zypper install git # on openSUSE
$ sudo xbps-install git # on Void Linux
Создайте каталог, в котором должен быть установлен SAGE_ROOT
:
$ mkdir -p ~/sage
$ cd ~/sage
Клонируйте git-репозиторий Sage:
$ git clone -c core.symlinks=true --filter blob:none
--origin upstream --branch develop --tags
https://github.com/sagemath/sage.git
Эта команда получает самую последнюю версию разработки. Замените --branch develop
на --branch master
, чтобы выбрать самую последнюю стабильную версию.
Это создаст подкаталог ~/sage/sage
. (Дополнительную информацию см. в разделе «Настройка git» и следующих разделах Руководства разработчика Sage.)
Перейдите в созданный подкаталог:
$ cd sage
[Windows] Дерево исходного кода Sage содержит символические ссылки, и сборка не будет работать, если используются окончания строк Windows, а не окончания строк UNIX.
Поэтому рекомендуется (но не обязательно) использовать WSL-версию git
.
Установите системные пакеты.
Либо обратитесь для этого к разделу об установке из исходного кода в Руководстве по установке Sage, где собраны системные пакеты, которые вы можете установить. По завершении перейдите к шагу 7 (начальная загрузка).
В качестве альтернативы можно воспользоваться более детальным подходом, описанным ниже.
[Linux, WSL] Установите необходимые минимальные требования для сборки:
Компиляторы: gcc
, gfortran
, g++
(поддерживаются версии GCC от 8.4.0 до 13.x и последние версии Clang (LLVM). См. build/pkgs/gcc/SPKG.rst и build/pkgs/gfortran/SPKG.rst для обсуждения подходящих компиляторов.
Инструменты сборки: GNU make
, GNU m4
, perl
(включая ExtUtils::MakeMaker
), ranlib
, git
, tar
, bc
. Дополнительную информацию см. в build/pkgs/_prereq/SPKG.rst.
Python 3.4 или новее или Python 2.7, полная установка, включая urllib
; но в идеале версия 3.9.x, 3.10.x, 3.11.x, 3.12.x, что позволит избежать необходимости собирать собственную копию Python 3 от Sage. Для получения более подробной информации см. build/pkgs/python3/SPKG.rst.
Мы собрали списки системных пакетов, которые предоставляют эти необходимые условия для сборки. Смотрите, в папке build/pkgs/_prereq/distros лежат файлы Arch.txt, debian.txt (также для Ubuntu, Linux Mint и т.д.), Fedora.txt (также для Red Hat, CentOS), opensuse.txt, slackware.txt и void.txt или посетите https://doc.sagemath.org/html/en/reference/spkg/_prereq.html#spkg-prereq.
Необязательно: рекомендуется установить инструменты LaTeX и ImageMagick (например, команду «конвертировать»), поскольку они позволяют использовать некоторые функции построения графиков.
[Разработка] Если вы планируете заниматься разработкой Sage или иным образом работать с ветвями заявок, а не только с выпусками, установите необходимые условия для начальной загрузки. Посмотрите файлы в папке build/pkgs/_bootstrap/distros или посетите https://doc.sagemath.org/html/en/reference/spkg/_bootstrap.html#spkg-bootstrap.
Загрузите исходное дерево с помощью следующей команды:
$ make configure
(Если необходимые условия для начальной загрузки не установлены, эта команда вместо этого загрузит пакет, предоставляющий предварительно созданные выходные данные начальной загрузки.)
Очистите среду сборки. Используйте команду
$ env
для проверки текущих переменных среды, в частности PATH
, PKG_CONFIG_PATH
, LD_LIBRARY_PATH
, CFLAGS
, CPPFLAGS
, CXXFLAGS
и LDFLAGS
(если они установлены).
Удалите из этих переменных среды (разделенных двоеточием) элементы, которые Sage не следует использовать для своей собственной сборки. В частности, удалите элементы, если они относятся к предыдущей установке Sage.
[WSL] В частности, WSL импортирует множество элементов из переменной Windows PATH
в среду Linux, что может привести к запутанным ошибкам сборки. Эти элементы обычно начинаются с /mnt/c
. Лучше всего удалить их все из переменных среды. Например, вы можете установить PATH
с помощью команды:
$ export PATH=/usr/sbin/:/sbin/:/bin/:/usr/lib/wsl/lib/
[macOS с доморощенным] Установите необходимые переменные среды для сборки:
$ source ./.homebrew-build-env
Это сделано для того, чтобы некоторые пакеты Homebrew (так называемые пакеты только для бочонков) были доступны для сборки. Запустите его один раз, чтобы применить предложения для текущего сеанса терминала. Возможно, вам придется повторить эту команду перед перестройкой Sage из нового сеанса терминала или после установки дополнительных пакетов homebrew. (Вы также можете добавить его в свой профиль оболочки, чтобы он автоматически запускался во всех будущих сеансах.)
При желании выберите префикс установки ( SAGE_LOCAL
):
Традиционно и по умолчанию Sage устанавливается в иерархию подкаталогов, корневой каталог SAGE_ROOT/local/
.
Это можно изменить с помощью ./configure --prefix=SAGE_LOCAL
, где SAGE_LOCAL
— желаемый префикс установки, который должен быть доступен для записи пользователю.
Если вы используете эту опцию в сочетании с --disable-editable
, вы можете удалить все дерево исходного кода Sage после завершения процесса сборки. То, что будет установлено в SAGE_LOCAL
, будет автономной установкой Sage.
Обратите внимание, что в процессе сборки Sage make
сборку и установку ( make install
не требуется). Поэтому иерархия установки должна быть доступна для записи пользователю.
См. руководство по установке Sage для получения информации о вариантах установки в общие папки, такие как /usr/local/
. Не пытайтесь собрать Sage с root
.
При желании просмотрите параметры конфигурации, которые включают множество дополнительных пакетов:
$ ./configure --help
Примечательными опциями для разработчиков Sage являются следующие:
Используйте опцию --config-cache
, чтобы configure
сохранял дисковый кеш значений конфигурации. Это дает хорошее ускорение при тестировании ветвей заявок, которые производят обновления пакетов, что включает в себя автоматический повтор шага настройки.
Используйте опцию --enable-ccache
чтобы установить Sage, и используйте дополнительный пакет ccache
, который предварительно настроен для хранения дискового кэша объектных файлов, созданных из исходных файлов. Это может дать большое ускорение при переключении между разными ветками за счет использования дискового пространства.
Необязательно, но настоятельно рекомендуется: установите некоторые переменные среды для настройки сборки.
Например, переменная среды MAKE
определяет, следует ли запускать несколько заданий параллельно. Скажем, на машине с 4 процессорами команда export MAKE="make -j4"
настроит сценарий сборки для выполнения параллельной компиляции Sage с использованием 4 заданий. На некоторых мощных машинах вы можете даже рассмотреть -j16
, поскольку сборка с большим количеством заданий, чем количество ядер ЦП, может еще больше ускорить процесс.
Чтобы уменьшить вывод терминала во время сборки, введите export V=0
. ( V
означает «многословие».)
Некоторые переменные среды заслуживают особого упоминания: CC
, CXX
и FC
. Эти переменные, определяющие ваши компиляторы, могут быть установлены во время конфигурации, и их значения будут записаны для дальнейшего использования во время сборки и во время выполнения.
Подробное обсуждение дополнительных переменных среды для сборки Sage см. в руководстве по установке.
Введите ./configure
, а затем любые параметры, которые вы хотите использовать. Например, чтобы собрать Sage с пакетом gf2x
, предоставленным Sage, используйте ./configure --with-system-gf2x=no
.
В конце успешного запуска ./configure
вы можете увидеть сообщения с рекомендациями установить дополнительные системные пакеты с помощью вашего менеджера пакетов.
По большому списку пакетов Sage Sage может определить, подходит ли установленный системный пакет для использования с Sage; в этом случае Sage не будет создавать еще одну копию из исходного кода.
Иногда в сообщениях предлагается установить пакеты, которые уже установлены в вашей системе. Подробности смотрите в предыдущих сообщениях конфигурации или в файле config.log
. Также в сообщениях может быть рекомендация установить пакеты, которых на самом деле нет; только самые последние выпуски вашего дистрибутива будут содержать все эти рекомендуемые пакеты.
Необязательно: если вы решите установить дополнительные системные пакеты, повторный запуск ./configure
проверит, можно ли использовать установленные версии для Sage; если да, то это уменьшит время компиляции и дисковое пространство, необходимое Sage. Использование пакетов можно настроить с помощью параметров ./configure
(проверьте еще раз вывод ./configure --help
).
Типа make
. Вот и все! Все автоматическое и неинтерактивное.
Если вы следовали приведенным выше инструкциям, в частности относительно установки системных пакетов, рекомендованных выводом ./configure
(шаг 11), и относительно параллельной сборки (шаг 10), сборка Sage на современном компьютере займет менее одного часа. (Иначе это может занять гораздо больше времени.)
Сборка должна работать нормально на всех полностью поддерживаемых платформах. Если это не так, мы хотим знать!
Введите ./sage
, чтобы попробовать. В Sage попробуйте, например, 2 + 2
, plot(x^2)
, plot3d(lambda x, y: x*y, (-1, 1), (-1, 1))
чтобы протестировать простое вычисление и построение графика в 2Д и 3Д. Введите Ctrl + D или quit
, чтобы выйти из Sage.
Необязательно: введите make ptestlong
, чтобы протестировать все примеры в документации (более 200 000 строк ввода!) — это занимает от 10 минут до нескольких часов. Не беспокойтесь, если произойдет от 2 до 3 сбоев, но всегда смело отправляйте раздел logs/ptestlong.log
, содержащий ошибки, в список рассылки поддержки sage. Если есть многочисленные сбои, в вашей сборке возникла серьезная проблема.
HTML-версия документации создается в процессе компиляции Sage и находится в каталоге local/share/doc/sage/html/
. Возможно, вы захотите добавить его в закладки в своем браузере.
Необязательно: если вы хотите создать PDF-версию документации, запустите make doc-pdf
(для этого необходимо установить LaTeX).
Необязательно: установите интересующие вас дополнительные пакеты: получите список, набрав ./sage --optional
или посетив страницу документации пакетов.
Необязательно: создайте символическую ссылку на установленный скрипт sage
в каталоге в вашем PATH
, например /usr/local
. Это позволит вам запустить Sage, набрав sage
из любого места, вместо того, чтобы вводить полный путь или переходить в каталог Sage и набирать ./sage
. Это можно сделать, запустив:
$ sudo ln -s $(./sage -sh -c 'ls $SAGE_ROOT/venv/bin/sage') /usr/local/bin
Необязательно: настройте SageMath в качестве ядра Jupyter в существующем блокноте Jupyter или установке JupyterLab, как описано в разделе «Запуск SageMath» в Руководстве по установке Sage.
Для установки Sage в среде Python из PyPI Sage предоставляет устанавливаемый pip
пакет sagemath-standard.
Если вам не нужно устанавливать Sage в конкретную существующую среду, мы рекомендуем создать и активировать новую виртуальную среду, например ~/sage-venv/
:
$ python3 -m venv ~/sage-venv
$ source ~/sage-venv/bin/activate
В качестве первого шага установки установите sage_conf, который собирает различные необходимые пакеты в подкаталоге ~/.sage/
:
(sage-venv) $ python3 -m pip install -v sage_conf
После успешной установки рулевая рубка предоставляет различные пакеты Python. Вы можете перечислить колеса с помощью команды:
(sage-venv) $ ls $(sage-config SAGE_SPKG_WHEELS)
Если это выдает ошибку, сообщающую, что sage-config
не найден, проверьте все сообщения, которые могла напечатать команда pip install
. Возможно, вам придется изменить PATH
, например:
$ export PATH="$(python3 -c 'import sysconfig; print(sysconfig.get_path("scripts", "posix_user"))'):$PATH"
Теперь установите пакеты из рулевой рубки и пакет sage_setup и, наконец, установите библиотеку Sage:
(sage-venv) $ python3 -m pip install $(sage-config SAGE_SPKG_WHEELS)/*.whl sage_setup
(sage-venv) $ python3 -m pip install --no-build-isolation -v sagemath-standard
Приведенные выше инструкции устанавливают последнюю стабильную версию Sage. Чтобы вместо этого установить последнюю версию разработки, добавьте переключатель --pre
ко всем вызовам python3 -m pip install
.
ПРИМЕЧАНИЕ. В PyPI есть множество других пакетов, устанавливаемых с pip
, со словом «sage» в названии. Некоторые из них поддерживаются проектом SageMath, некоторые предоставляются пользователями SageMath для различных целей, а третьи совершенно не связаны с SageMath. Не используйте пакеты sage
и sagemath
. Список пакетов см. в главе «Пакеты и возможности» Справочного руководства Sage.
SageMath доступен на Docker Hub и может быть загружен:
docker pull sagemath/sagemath
В настоящее время обновляются только стабильные версии.
Если у вас возникли проблемы со сборкой Sage, обратитесь к Руководству по установке Sage, а также к справке по установке для конкретной версии в обзоре выпуска, соответствующей устанавливаемой вами версии.
Пожалуйста, не стесняйтесь обращаться за помощью на форум SageMath или в список рассылки поддержки sage. В разделе «Устранение неполадок» Руководства по установке Sage приведены инструкции о том, какую информацию следует предоставить, чтобы мы могли оказывать помощь более эффективно.
Если вы хотите внести свой вклад в развитие Sage, мы настоятельно рекомендуем вам прочитать Руководство разработчика.
В состав Sage входят важные компоненты, написанные на следующих языках: C/C++, Python, Cython, Common Lisp, Fortran и немного Perl.
Упрощенная структура каталогов (только необходимые файлы/каталоги):
SAGE_ROOT Root directory (create by git clone)
├── build
│ └── pkgs Every package is a subdirectory here
│ ├── 4ti2/
│ …
│ └── zlib/
├── 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
│ …
│ └── zlib-1.2.11.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
│ …
│ └── zlib-1.2.11.tar.gz
├── venv -> SAGE_VENV Convenience symlink to the virtual environment
└── VERSION.txt
Более подробную информацию можно найти в нашем Руководстве для разработчиков.
Это краткое описание системы сборки дистрибутива программного обеспечения Sage. Полная система Sage состоит из двух компонентов — библиотеки Sage Python и связанных с ней пользовательских интерфейсов, а также более крупного дистрибутива основных зависимостей Sage (для тех зависимостей, которые не предоставляются системой пользователя).
Библиотека Python Sage собирается и устанавливается с использованием сценария setup.py
, который является стандартным для пакетов Python ( setup.py
Sage нетривиален, но не является чем-то необычным).
Большая часть остальной части системы сборки связана с построением всех зависимостей Sage в правильном порядке по отношению друг к другу. Зависимости, включенные в Sage, называются SPKG (т.е. «Пакеты Sage») и перечислены в разделе build/pkgs
.
Основной точкой входа в систему сборки Sage является Makefile
верхнего уровня в корне дерева исходного кода. В отличие от большинства обычных проектов, использующих autoconf (также это делает Sage, как описано ниже), этот Makefile
не генерируется. Вместо этого он содержит несколько целей высокого уровня и целей, связанных с начальной загрузкой системы. Тем не менее, мы по-прежнему запускаем make
из корня дерева исходного кода — цели, не определенные явно в Makefile
верхнего уровня, передаются в другой Makefile под build/make/Makefile
.
Последний build/make/Makefile
создается сценарием configure
, созданным autoconf, с использованием шаблона в build/make/Makefile.in
. Сюда входят правила для сборки самой библиотеки Sage ( make sagelib
), а также для сборки и установки каждой из зависимостей Sage (например, make gf2x
).
Сам сценарий configure
, если он еще не создан, можно создать, запустив сценарий bootstrap
(последний требует установки автоинструментов GNU ). Makefile
верхнего уровня также автоматически позаботится об этом.
Подводя итог, запуск команды типа make python3
на верхнем уровне дерева исходного кода выглядит примерно так:
make python3
./bootstrap
, если configure
требует обновления./configure
с любыми ранее настроенными параметрами, если build/make/Makefile
требует обновленияbuild/make
и запустите сценарий install
— это не более чем интерфейс для запуска make -f build/make/Makefile python3
, который устанавливает некоторые необходимые переменные среды и записывает некоторую информациюbuild/make/Makefile
содержит фактическое правило сборки python3
; это включает в себя сначала построение всех зависимостей python3
(и их зависимостей рекурсивно); фактическая установка пакета выполняется с помощью программы sage-spkg
Перемещение каталога SAGE_ROOT
или SAGE_LOCAL
после сборки Sage не поддерживается. Если вы переместите каталоги, вам придется запустить команду make distclean
и собрать Sage заново с нуля.
Для общесистемной установки вам необходимо собрать Sage как «обычного» пользователя, а затем как root вы можете изменить разрешения. Дополнительную информацию см. в руководстве по установке.
Ваша локальная установка Sage почти точно такая же, как и любая установка «разработчика». Вы можете вносить изменения в документацию, исходный код и т. д. и очень легко упаковывать полные результаты для распространения, как это делаем мы.
Чтобы создать бинарный дистрибутив с установленными на данный момент пакетами, посетите sagemath/binary-pkg.
Чтобы создать собственный архив с исходным кодом Sage, введите:
$ make dist
Результат помещается в каталог dist/
.
Все программное обеспечение, включенное в состав Sage, защищено авторскими правами соответствующих авторов и выпущено по лицензии с открытым исходным кодом, совместимой с GPL версии 3 или более поздней версии . Дополнительную информацию см. в файле COPYING.txt.
Исходники находятся в немодифицированных (насколько это возможно) архивах в каталоге upstream/
. Оставшееся описание, информация о версии, исправления и сценарии сборки находятся в соответствующем каталоге build/pkgs/
. Этот каталог является частью репозитория Sage git.
Авторские права (C) 2005–2024, команда разработчиков Sage.
https://www.sagemath.org