不使用Jupyternotebook在VScode中轻松运行sage文件

前言

公钥实验要求使用sagemath来进行一些算法的编写

目前,编写sage程序并运行主要有以下方式:

  • 使用Linux运行
    • 使用实体机运行
      • 首先apt安装sage
      • 编写代码
      • 使用命令 ‘sage filename’ 运行
    • 使用虚拟机运行
      • 同上
    • 使用wsl运行
      • 同上
  • 使用Windows运行
    • 安装sage软件
    • 使用jupyternotebook在浏览器编辑运行

无论是那种方法,在运行时要么前置步骤复杂(jupyternotebook),要么运行时要输指令。不能说十分麻烦,但就是不爽

令人不爽的事情 一定要被解决!

效果

通过搜索和摸索我找到了一套如运行python一样简单的运行sage程序的方法,还有代码 高亮 ,先看看效果:

  1. 打开VScode新建.sage文件nUzGj.png
  2. 写完后使用快捷键Ctrl+Alt+n运行sage文件nUJg2.png
  3. Ctrl+c可以中断代码运行

是不是非常简单?非常舒适?非常爽?

接下来讲解配置方法

配置

安装wsl

教程参考1:网页链接
教程参考2:网页链接

首先开启Windows的wsl功能,在搜索栏中搜索‘启用或关闭windows功能’

n8w4V.png

n8pKI.png

然后打开Hyper-V, 适用于Linux的Windows子系统,虚拟机平台三项功能,注意Hyper-V功能只有专业版才有,家庭版没有,一般不会影响后续的wsl安装,但是如果影响了,请跟着下面的步骤手动安装Hyper-V:

新建txt文档hyper_v.txt,复制以下脚本到里面,然后保存退出后将文件后缀名改为.bat然后右键使用管理员权限打开,等待Hyper-V安装完成后重启电脑

1
2
3
4
5
6
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hv.txt
for /f %%i in ('findstr /i . hv.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hv.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
Pause

然后在需要安装的文件夹打开powershell,输入以下命令:

1
Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing

文件有4个多g,多安装一会也正常

然后依次执行下面四条命令:

1
2
3
4
Rename-Item .\Ubuntu20.04.appx Ubuntu.zip
Expand-Archive .\Ubuntu.zip -Verbose
cd .\Ubuntu\
.\ubuntu2004.exe

第一次安装会让你输入用户名和密码,输入即可

最后可以在powershell输入以下命令查看wsl版本:

1
wsl -l  -v

由于国内种种不可抗拒因素,自带的软件源很慢,所以要换软件源,一般换成清华源。另外,wsl的Ubuntu证书是过期的,如果你想手动还源的话请记得先更新证书

使用大佬写好的脚本直接换源(wsl中执行):

1
wget https://gitee.com/lin-xi-269/tools/raw/master/os/QHubuntu20.04 && bash QHubuntu20.04

换完源后记得删掉换源脚本,以防哪次不小心运行了:

n8m0W.png

然后输入

1
2
sudo apt-get update
sudo apt-get upgrade

就可以更新软件源了

注意,在这一步我遇到了无法正确更新软件源的问题,原因是wsl的Ubuntu的证书过期了,需要手动更新证书。或者如果你像我一样懒,而且使用wsl没有安全的需求,就直接将软件源里面的https都改成http也能更新软件源,在/etc/apt/sources.list中修改

安装sagemath

wsl中输入命令:

1
sudo apt-get install  sagemath sagemath-doc sagemath-jupyter

等待安装好就行了

在wsl中输入sage就可以运行sagemath:

n4zNC.png

但是咱们的目标不是在这儿运行sage,而是在VScode中运行sage,所以继续

连接VScode

安装wsl插件,直接在VScode的Extensions中搜索wsl,安装即可

n4j7m.png

可以试试左下角的wsl按钮,点击后点击 ‘Connected to wsl’ 再打开终端会打开wsl的终端。首次连接会下载服务器,等一会就行了

n448N.png

n48iT.png

到这里,wsl和VScode的连接就完成了

安装插件实现快捷键运行sage文件

教程参考:网页链接

直接运行

现在编辑运行sage文件其实已经够轻松了,直接创建sage文件,编辑结束后再终端中输入

1
wsl sage filename

就可以运行了:
n4Nw2.png

但是还要我输命令,真不爽,所以我找到了一个插件,可以实现快捷键运行sage文件

快捷键运行

安装插件:Code Runner

n4a7j.png

这个插件的作用是可以在VScode中运行各种语言的文件,原理是检测后缀名来判断文件,然后输入相应文件的运行命令到终端。而这个插件自己是没有sage的运行命令的,所以我们要自己添加:

Ctrl+Shift+P,打开用户设置(Open User Settings),搜索Code-runner找到对应配置,Executor Map 和 Executor Map By File Extension,把两个 ‘在settings.json中编辑’ 都点了,就会在settings.json生成相关代码 然后在settings.json中编辑

n5glI.png

n5dTH.png

n5YQO.png

进行配置:

1
2
3
4
5
6
7
8
"code-runner.executorMapByFileExtension": {
".sage": "cd $dir && wsl sage \"$fileName\"",
".py" : "python"
},
"code-runner.executorMap": {
"python": null,
}

解释一下在干嘛:上面的是根据.sage来判断是sage文件,然后使用相关命令。下面为了不和python冲突,所以把python的命令设置为null

终端中运行

Code Runner默认在OUTPUT中运行对应文件,结束后再输出出来,很蠢,令人不爽,在Code Runner的设置中修改:

nY4hp.png

有个 ‘在运行前保存’ 也建议加上,方便我这样的懒人

然后就可以使用快捷键运行sage文件了,快捷键是Ctrl+Alt+n
nUJg2.png

想要中断运行就Ctrl+c就行了

一些收尾

sage代码高亮

现在sage代码能狗运行了,但是没有代码高亮,由于sage基于python,我们把sage文件的代码高亮设置为python就行了

由于识别为python文件,sage中有些python没有的语法会被识别为错误,但是不影响运行

在settings.json中加上这一段:

1
2
3
"files.associations": {
"*.sage": "python"
},

记得在settings.json中加入新的配置之前要在前面加上逗号

.sage.py文件隐藏

每次运行都会产生一个*.sage.py文件,这个文件是sage运行时产生的,看着不爽。

nYj2R.png

我们可以在settings.json中设置隐藏这个文件:

1
2
3
"files.exclude": {
"**/*.sage.py": true
}

至此就全部完成了sage在VScode上的配置了

结语

爽多了