概述
这两个东西是干什么用的
先放上官方文档
nbgrader
jupyterhub
nbgrader是可以用来批改作业的,对于python写的编程作业写好测试数据可以自动批改。对教师端,功能有发作业、写测试数据、收作业、打分。对学生端功能就是收到老师发的作业,写作业,测试,交作业。
两个搭配使用更方便一些,基本上界面化操作,如果不用jupyterhub实现一些功能需要在后台敲代码。
搭建前的准备
需要Linux环境,Windows不支持,用到的Linux的命令很简单,当时我是零基础,看了两个小时入门视频就开始了。
https://study.163.com/course/courseMain.htm?courseId=1548004
如果不使用root,则需要一个权限为ALL的用户,因为多人使用jupyterhub的话需要root权限。建议是普通用户授权为ALL,直接用root有风险可能不知道什么时候就删掉了什么重要的东西。
https://blog.csdn.net/xiaojingfirst/article/details/81747285
jupyterhub
主要参考:https://zhuanlan.zhihu.com/p/52739122
- 下载anaconda
sudo cd /opt #进入opt目录
mkdir Anaconda #在opt目录下建立一个名为Anaconda的文件夹
cd Anaconda #进入Anaconda文件夹
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.0-Linux-x86_64.sh
#通过后面这个网址下载Anaconda
- 安装(所有操作全过程root权限,否则无法启动多人版)
sudo bash Anaconda3-5.3.0-Linux-x86_64.sh
安装全程需要输入两个yes,一个是同意条例进行安装,一个是同意写配置路径。中间还会让你选择安装目录,要安装在之前建好的Anaconda文件夹下,如果不写会默认安装到你的用户home,这样会导致别人无法使用Anaconda。
如果错过了同意写配置路径这一步,可以手动更改。
https://blog.csdn.net/ychgyyn/article/details/82258136
- 检查Anaconda是否安装成功
sudo conda list
如果成功了会列出一堆代码。这里可能会遇到的问题:sudo 后not find conda:https://www.cnblogs.com/MemoryOfStars/p/11309625.html
- 安装jupyterhub
先新建一个目录/opt/jupyterhub,剩下安装jupyterhub和nbgrader都进入这个目录下操作
sudo cd .. #进入上一次目录,之前的操作都在Anaconda目录下
mkdir jupyterhub #创建jupyterhub目录
cd jupyterhub #进入jupyterhub目录
(base)$ sudo conda install JupyterHub #安装JupyterHub
中间可能会提示要你升级,yes就行。
如果安装好了,运行下面的命令应该会返回帮助内容:
sudo jupyterhub -h
- 生成配置文件
sudo jupyterhub --generate-config
- 修改配置文件
进入配置文件后在里面写:
c.JupyterHub.ip = '10.3.40.47' #这一行ip写自己电脑的ip
c.JupyrerHub.port = 12443 #这一行是端口号,可以随便写,不冲突就行
c.Spawner.ip = '127.0.0.1' #这一行不用改,照抄
-
安装安装 JupyterHub 调用 Anaconda 环境依赖
这一步看上面参考链接里的吧,我没这一步后来也能运行 -
使用
在你安装jupyterhub的目录下输入
sudo jupyterhub
然后可以在自己的电脑上或者别的电脑上(需要跟你在同一个网里,比如我是用学校的服务器配的,必须登上学校的网才可以),在浏览器里输入 ip+端口号进入jupyter的界面,比如我这个是输入 10.3.40.47::12443
显示登陆界面后,账户密码为你的Linux的账户密码。
关闭服务只需要在启动界面Ctrl+C
如果不小心在别的目录下运行启动了,会失败,而且也无法取消,这个时候需要你关一下线程,当时我是用的 kill -9 命令,后来又不行了不太懂为什么,听同学说是需要先查找线程名,然后 kill -9 线程名,没用过,就不接着写了。如果你不会的话,其实不管它第二天自己就会好。(可能是长时间不用就自杀了哈哈哈)
nbgrader
- 安装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
- 启动
sudo nbgrader quickstart python #最后一个为课程名
- 设置交换目录
mkdir /tmp/exchange #创建一个目录
chmod ugo+rw /tmp/exchange #将这个目录的读写权改为全部用户可读写
- 配置文件
touch nbgrader_config.py #进入配置文件,然后写下面的代码
c = get_config()
c.CourseDirectory.course_id = "python" #引号里是课程名
c.Exchange.root = "/tmp/exchange" #引号里是交换目录的路径
- 用户的配置文件
每个用户也需要配置文件,进入需要使用nbgrader用户的根目录,自己建立一个文件名为nbgrader_config.py,然后进入写上一步的代码。 - 关掉学生不需要的插件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
这里的思想是,老师与学生的区别就在能不能使用发作业、收作业的功能。
教师端:
箭头所指为发布作业的插件
学生端:
只有接受作业和交作业的插件
- 多个课程怎么办
其实nbgrader是提供了多个课程这个功能的,但是我没有尝试成功,所以就改了另一个思路。
上面曾经设置过一个交换目录并修改了权限,这个目录的作用是,老师把作业放到这里面,学生从这个目录里取作业,是一个公用目录。所以,设置不同的交换目录就能实现不同的课程作业互不干扰地发布,但是无法实现一个教师账号同时管理多个课程。一个用户只能有一个交换目录也就是只能有一个课程,可以实现一个课程有多个老师(也就是给多个用户安装可以发布作业的插件)。
做法如下:
sudo nbgrader quickstart pythonA #起一个新的课程名
然后建立新的交换目录
mkdir /tmp/exchangeA
chmod ugo+rw /tmp/exchangeA
每个课程都会有自己的配置目录,将新课程中的配置目录改为
c = get_config()
c.CourseDirectory.course_id = "pythonA"
c.Exchange.root = "/tmp/exchangeA"
然后再去需要参加pythonA课程的学生用户的根目录下写配置文件,将id和exchange改成相应的。
目前遇到的问题
想要使用jupyterhub必须现在Linux上给学生建立账户,工作量很大,一开始为了方便管理我尝试过批量生成并且设置了根目录,后来发现如果不是使用默认目录而是使用指定目录的话,jupyterhub不承认这个用户。
现在多人登录能够实现,但是人多就不行,最多7个,有时候四五个就不行了,下一个上去就会报错,之前登上去的用户在报错后也不能使用了,不报错之前登上去的用户可以互不干扰地使用,不知道是插件的问题还是我服务器质量不行。
如果有后来的小伙伴解决了这个问题,希望能一起交流一下!
最后
以上就是独特中心为你收集整理的jupyterhub+nbgrader配置 实现自动批改Python编程作业的全部内容,希望文章能够帮你解决jupyterhub+nbgrader配置 实现自动批改Python编程作业所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复