jupyterhub+nbgrader配置实现⾃动批改Python编程作业
这两个东西是⼲什么⽤的
先放上官⽅⽂档
nbgrader是可以⽤来批改作业的,对于python写的编程作业写好测试数据可以⾃动批改。对教师端,功能有发作业、写测试数据、收作业、打分。对学⽣端功能就是收到⽼师发的作业,写作业,测试,交作业。
两个搭配使⽤更⽅便⼀些,基本上界⾯化操作,如果不⽤jupyterhub实现⼀些功能需要在后台敲代码。
搭建前的准备
jupyterhub
1. 下载anaconda
sudo cd /opt #进⼊opt⽬录
mkdir Anaconda #在opt⽬录下建⽴⼀个名为Anaconda的⽂件夹
cd Anaconda #进⼊Anaconda⽂件夹
wget mirrors.tuna.tsinghua.edu/anaconda/archive/Anaconda3-5.3.0-Linux-x86_64.sh
#通过后⾯这个⽹址下载Anaconda
2. 安装(所有操作全过程root权限,否则⽆法启动多⼈版)
sudo bash Anaconda3-5.3.0-Linux-x86_64.sh
3. 检查Anaconda是否安装成功
sudo conda list
4. 安装jupyterhub
先新建⼀个⽬录/opt/jupyterhub,剩下安装jupyterhub和nbgrader都进⼊这个⽬录下操作
sudo cd .. #进⼊上⼀次⽬录,之前的操作都在Anaconda⽬录下
mkdir jupyterhub #创建jupyterhub⽬录
cd jupyterhub #进⼊jupyterhub⽬录
(base)$ sudo conda install JupyterHub #安装JupyterHub
中间可能会提⽰要你升级,yes就⾏。
如果安装好了,运⾏下⾯的命令应该会返回帮助内容:
sudo jupyterhub -h
5. ⽣成配置⽂件
sudo jupyterhub --generate-config
6. 修改配置⽂件
进⼊配置⽂件后在⾥⾯写:
c.JupyterHub.ip = '10.3.40.47' #这⼀⾏ip写⾃⼰电脑的ip
c.JupyrerHub.port = 12443 #这⼀⾏是端⼝号,可以随便写,不冲突就⾏
c.Spawner.ip = '127.0.0.1' #这⼀⾏不⽤改,照抄
7. 安装安装 JupyterHub 调⽤ Anaconda 环境依赖
这⼀步看上⾯参考链接⾥的吧,我没这⼀步后来也能运⾏
8. 使⽤
在你安装jupyterhub的⽬录下输⼊
sudo jupyterhub
然后可以在⾃⼰的电脑上或者别的电脑上(需要跟你在同⼀个⽹⾥,⽐如我是⽤学校的服务器配的,必须登上学校的⽹才可以),在浏览器⾥输⼊ ip+端⼝号进⼊jupyter的界⾯,⽐如我这个是输⼊ 10.3.40.47::12443
显⽰登陆界⾯后,账户密码为你的Linux的账户密码。
关闭服务只需要在启动界⾯Ctrl+C
如果不⼩⼼在别的⽬录下运⾏启动了,会失败,⽽且也⽆法取消,这个时候需要你关⼀下线程,当时
我是⽤的 kill -9 命令,后来⼜不⾏了不太懂为什么,听同学说是需要先查线程名,然后 kill -9 线程名,没⽤过,就不接着写了。如果你不会的话,其实不管它第⼆天⾃⼰就会好。(可能是长时间不⽤就⾃杀了哈哈哈)
nbgrader
1. 安装nbgrader
sudo jupyter nbextension install --sys-prefix --py nbgrader --overwrite
sudo jupyter nbextension enable --sys-prefix --py nbgrader
sudo jupyter serverextension enable --sys-prefix --py nbgrader
python怎么读文件夹下的文件夹2. 启动
sudo nbgrader quickstart python #最后⼀个为课程名
3. 设置交换⽬录
mkdir /tmp/exchange #创建⼀个⽬录
chmod ugo+rw /tmp/exchange #将这个⽬录的读写权改为全部⽤户可读写
4. 配置⽂件
touch nbgrader_config.py #进⼊配置⽂件,然后写下⾯的代码
c = get_config()
urse_id = "python" #引号⾥是课程名
= "/tmp/exchange" #引号⾥是交换⽬录的路径
5. ⽤户的配置⽂件
每个⽤户也需要配置⽂件,进⼊需要使⽤nbgrader⽤户的根⽬录,⾃⼰建⽴⼀个⽂件名为nbgrader_config.py,然后进⼊写上⼀步的代码。
6. 关掉学⽣不需要的插件formgrader
先禁⽤(sudo下运⾏)
sudo jupyter nbextension disable --sys-prefix formgrader/main --section=tree
sudo jupyter serverextension disable --sys-prefix nbgrader.server_extensions.formgrader
再给需要⽤的⽤户打开(在Linux上⽤需要使⽤此功能的账户登录,进⼊根⽬录下 cd ~,这⼀步不需要sudo)
jupyter nbextension enable --user formgrader/main --section=tree
jupyter serverextension enable --user nbgrader.server_extensions.formgrader
这⾥的思想是,⽼师与学⽣的区别就在能不能使⽤发作业、收作业的功能。
教师端:
箭头所指为发布作业的插件
学⽣端:
只有接受作业和交作业的插件
7. 多个课程怎么办
其实nbgrader是提供了多个课程这个功能的,但是我没有尝试成功,所以就改了另⼀个思路。
上⾯曾经设置过⼀个交换⽬录并修改了权限,这个⽬录的作⽤是,⽼师把作业放到这⾥⾯,学⽣从这个⽬录⾥取作业,是⼀个公⽤⽬录。所以,设置不同的交换⽬录就能实现不同的课程作业互不⼲扰地发布,但是⽆法实现⼀个教师账号同时管理多个课程。⼀个⽤户只能有⼀个交换⽬录也就是只能有⼀个课程,可以实现⼀个课程有多个⽼师(也就是给多个⽤户安装可以发布作业的插件)。
做法如下:
sudo nbgrader quickstart pythonA #起⼀个新的课程名
然后建⽴新的交换⽬录
mkdir /tmp/exchangeA
chmod ugo+rw /tmp/exchangeA
每个课程都会有⾃⼰的配置⽬录,将新课程中的配置⽬录改为
c = get_config()
urse_id = "pythonA"
= "/tmp/exchangeA"
然后再去需要参加pythonA课程的学⽣⽤户的根⽬录下写配置⽂件,将id和exchange改成相应的。
⽬前遇到的问题
想要使⽤jupyterhub必须现在Linux上给学⽣建⽴账户,⼯作量很⼤,⼀开始为了⽅便管理我尝试过批
量⽣成并且设置了根⽬录,后来发现如果不是使⽤默认⽬录⽽是使⽤指定⽬录的话,jupyterhub不承认这个⽤户。
现在多⼈登录能够实现,但是⼈多就不⾏,最多7个,有时候四五个就不⾏了,下⼀个上去就会报错,之前登上去的⽤户在报错后也不能使⽤了,不报错之前登上去的⽤户可以互不⼲扰地使⽤,不知道是插件的问题还是我服务器质量不⾏。
如果有后来的⼩伙伴解决了这个问题,希望能⼀起交流⼀下!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论