wsl上部署sagemath

wsl上部署sagemath

介绍

SageMath 是一个开源的数学软件系统,内部整合了 NumPy、SciPy、Maxima、GAP 等数百个数学包,常用于处理密码学大数分解、椭圆曲线以及高等数学中的符号微积分和矩阵推导。

为何不建议直接在本地windows安装?

  • 运行机制臃肿:SageMath 核心依赖类 Unix 环境,Windows 原生版本实际上是捆绑了一个庞大的 Cygwin 模拟层,导致安装包体积达到数 GB,且运行效率存在明显折损。
  • 生态集成困难:原生 Windows 版相对封闭,难以与现有的命令行工具链(如 Git、系统级 Python 脚本等)顺畅集成。

通过 Windows Subsystem for Linux (WSL) 运行原生的 Ubuntu 环境,可以无损调用 Linux 的执行效率,并与 Windows 宿主机文件系统互通。

基于 Conda 的部署

在 Ubuntu 下不使用自带的 apt 安装或源码编译的原因:

  • apt 软件源中的 SageMath 版本通常严重滞后。
  • 源码编译需要手动解决数以百计的 C/C++ 和 Fortran 库依赖,耗时极长且容易因缺少系统级头文件而失败。

利用 Conda(推荐使用轻量级的 Miniforge)可以直接拉取 conda-forge 社区预编译的完整二进制包,免去编译过程并实现环境隔离。

部署步骤:

  1. 下载并安装 Miniforge:
1
2
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
bash Miniforge3-$(uname)-$(uname -m).sh

image-20260314202002401image-20260314202035979

按下回车键image-20260314202056185

输入yes

安装过程中按提示确认,完成后执行以下命令初始化环境变量:

1
source ~/.bashrc

创建并激活 SageMath 独立环境(以 Python 3.12 为例):

1
2
conda create -n sage sage python=3.12
conda activate sage

image-20260314193542148

当终端提示符前出现 (sage) 时,即表示部署完成。直接输入 sage 即可进入交互环境

日常使用

在 WSL 中启动后,由于禁用了 base 环境自动激活,需手动进入 Sage 环境。

1
2
3
4
5
# 1. 激活 Sage 环境
conda activate sage

# 2. 检查环境状态(可选,确认左侧出现 (sage))
conda info --envs

交互式命令行

1
2
3
4
5
6
# 启动交互式终端
sage

# 示例操作 (进入 sage: 提示符后)
# factor(2^128 - 1)
# exit() (退出)

适用于临时的数学计算、大数分解或验证某个公式。

  1. 进入环境:conda activate sage
  2. 启动:输入 sage
  3. 操作:在 sage: 提示符后输入数学表达式。
    • 例如:factor(2^128 - 1)
  4. 退出:输入 exit 或按 Ctrl + D。

终端编辑

使用 Nano

  1. 新建/打开文件:输入 nano solve.py。

  2. 编辑内容:在编辑器中输入代码。注意必须引入 Sage 库:

    1
    2
    3
    from sage.all import *
    # 这里写逻辑,例如:
    print(is_prime(2**31 - 1))
  3. 保存:按 Ctrl + O,然后按 Enter 确认文件名。

  4. 退出:按 Ctrl + X。

  5. 运行:在终端输入 sage solve.py。

关于conda

Conda 常用指令

  • conda list:查看当前环境安装了哪些包。
  • conda install <package>:在当前环境安装新工具(如 requests)。
  • conda env remove -n sage:删除整个 sage 环境。

关于关闭“自动激活 base 环境”

命令:conda config --set auto_activate_base false

  • 利:保持系统纯净。WSL 启动时不会抢占系统路径,避免 Conda 的库与你进行的 xv6 或 C 语言底层实验产生冲突。
  • 弊:增加操作成本。每次使用 Sage 必须手动 conda activate sage,否则系统找不到 sage 命令。
  • 不关闭的影响:终端始终显示 (base),系统优先使用 Conda 提供的 Python,这可能导致你在编译一些依赖特定系统库的 C/C++ 项目时报错。

结语

我在windows和Ubuntu虚拟机还有wsl上都部署过sagemath,因为我本人不是crypto方向的,windows上因为只能使用老版本的限制很大,Ubuntu虚拟机放着就占我20多G,kali部署太复杂容易崩溃导致每次用完我就删,觉得以后不会用的,今天打suctf的时候一道ai安全又要用到,决定还是在wsl部署一个备用,这样占用少,操作简单,启动快,我认为是在windows电脑上最佳的方法

还有本篇博客的内容几乎都是ai写的,所以ai师傅放一作,感谢ai师傅让我蹭一个二作orz

Contents