Upgrade SageMath to Version9 on MacOS

起因

python2没了,都往python3转了,SageMath也发布新的9.x版本,全部都改用python3了。

确实,python3多好,还用什么python2啊。

正好看到大佬们用的都是python3的SageMath了,而我还在用SageMath 8.9,代码复制过来都不太兼容。。。所以打算去更新一下SageMath。

环境

系统: macOS 10.15.5

时间:2020.06.05

过程

直接去官网 下最新版的SageMath 9.1,找离自己比较近的镜像节点。

Screen Shot 2020-06-05 at 1.51.00 PM

这里有好几个选项,源码、app。

我一开始去下了sage-9.1-OSX_10.11.6-x86_64.dmg,下好了,把它拿出来放到Applications目录下。

这是一个还没编译好的,需要自己先运行sage去makefile。

但是makefile途中,报错了:

Screen Shot 2020-06-05 at 1.56.59 PM

google去搜,没有搜到相关的。看来我本机的环境稍微有点问题?

OK,换一个,去下sage-9.1-OSX_10.11.6-x86_64.app.dmg

这是一个app,已经编译好了,直接拖到Applications目录下就可以了。

然后Command + space,搜索Sage...就能找到,打开,会自动启动jupyter server。

随便创建了一个Notebook,操作了下,的确是python3的,没问题,整好了。


但是还是比较喜欢从命令行里去启动这个server。

像这个样子:

Screen Shot 2020-06-05 at 2.03.14 PM

但是sage不在环境变量里,需要把它给添加进去。

sage命令在/Applications/SageMath-9.1.app/sage中,/usr/local/bin在环境变量里,

可以在/usr/local/bin里创建一个soft link:

1
2
3
$ cd /usr/local/bin
$ ln -s /Applications/SageMath-9.1.app/sage sage9    # 新版
$ ln -s /Applications/SageMath/sage sage8            # 旧版

因为之前的SageMath 8.9写了很多东西,不是很想删除,所以创建了两个soft link,用sage8来指向旧版的、sage9指向新版的。

然后再在~/.zshrc里加几个alias:

alias sage8jupyter="cd ~/Documents/SageMath\ Workspace && sage8 -n jupyter"
alias sage9jupyter="cd ~/Documents/SageMath\ Workspace && sage9 -n jupyter"
alias sage="sage9"

这样默认的sage命令就是新版的SageMath 9.1,然后也可以通过sage9jupyter来快速切换到sage工作目录下并启动jupyter server。


看大佬们都是可以直接在sage里导入Crypto库、pwntools之类的,很方便,所以想着能不能也这样搞。

SageMath的python是自带的,跟系统的python不是一个东西。

如果直接在sage里from Crypto.Util.number import *的话,是找不到这个包的:

Screen Shot 2020-06-05 at 2.15.54 PM

所以需要给sage里的python去pip install这个包。

Screen Shot 2020-06-05 at 3.19.07 PM

会报错,搜了一下,是因为macOS比较特殊,系统用另外一种方式去处理这种SSL连接之类的东西。

sage-9.1-OSX_10.11.6-x86_64.app.dmg里编译好的sage是没有openssl模块的。

找了好久,终于找到了一个完美的解决方法: https://ask.sagemath.org/question/51130/ssl-error-using-sage-pip-install-to-download-a-package/

Screen Shot 2020-06-05 at 3.22.18 PM

已经有fix了,去链接里下载mac_sage9.tgz即可。

解压,然后在mac_sage文件夹所在的目录下,执行一下命令:

1
2
$ cd ~/Downloads
$ /Applications/SageMath-9.0.app/sage -python -m mac_sage9.fix

就能给sage添加ssl模块。

然后就能愉快地pip install了。

1
$ sage --pip install pycryptodome

结果

  • 给环境里加了一个SageMath 9.1

  • sage可以pip install了

ubuntu 18.04环境一间搭建脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
apt update
apt upgrade -y
apt install python -y

# Download SageMath
wget http://mirror.hust.edu.cn/sagemath/linux/64bit/sage-9.1-Ubuntu_18.04-x86_64.tar.bz2
# Decompress
tar -vxjf sage-9.1-Ubuntu_18.04-x86_64.tar.bz2

# Config
cd SageMath/
./sage

# PATH
ln -s $(pwd)/sage /usr/bin/sage

echo OK%