我是靠谱客的博主 独特中心,最近开发中收集的这篇文章主要介绍jupyterhub+nbgrader配置 实现自动批改Python编程作业,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这两个东西是干什么用的

先放上官方文档
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

  1. 下载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
  1. 安装(所有操作全过程root权限,否则无法启动多人版)
sudo bash Anaconda3-5.3.0-Linux-x86_64.sh

安装全程需要输入两个yes,一个是同意条例进行安装,一个是同意写配置路径。中间还会让你选择安装目录,要安装在之前建好的Anaconda文件夹下,如果不写会默认安装到你的用户home,这样会导致别人无法使用Anaconda。
如果错过了同意写配置路径这一步,可以手动更改。
https://blog.csdn.net/ychgyyn/article/details/82258136

  1. 检查Anaconda是否安装成功
sudo conda list

如果成功了会列出一堆代码。这里可能会遇到的问题:sudo 后not find conda:https://www.cnblogs.com/MemoryOfStars/p/11309625.html

  1. 安装jupyterhub

先新建一个目录/opt/jupyterhub,剩下安装jupyterhub和nbgrader都进入这个目录下操作

sudo cd ..  #进入上一次目录,之前的操作都在Anaconda目录下
mkdir jupyterhub  #创建jupyterhub目录
cd jupyterhub #进入jupyterhub目录
(base)$ sudo conda install JupyterHub #安装JupyterHub

中间可能会提示要你升级,yes就行。
如果安装好了,运行下面的命令应该会返回帮助内容:

sudo jupyterhub -h
  1. 生成配置文件
sudo jupyterhub --generate-config
  1. 修改配置文件
    进入配置文件后在里面写:
c.JupyterHub.ip = '10.3.40.47'  #这一行ip写自己电脑的ip
c.JupyrerHub.port = 12443 #这一行是端口号,可以随便写,不冲突就行
c.Spawner.ip = '127.0.0.1' #这一行不用改,照抄
  1. 安装安装 JupyterHub 调用 Anaconda 环境依赖
    这一步看上面参考链接里的吧,我没这一步后来也能运行

  2. 使用
    在你安装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
  1. 启动
sudo nbgrader quickstart python #最后一个为课程名
  1. 设置交换目录
mkdir /tmp/exchange  #创建一个目录
chmod ugo+rw /tmp/exchange #将这个目录的读写权改为全部用户可读写
  1. 配置文件
touch nbgrader_config.py  #进入配置文件,然后写下面的代码
c = get_config()
c.CourseDirectory.course_id = "python" #引号里是课程名
c.Exchange.root = "/tmp/exchange" #引号里是交换目录的路径
  1. 用户的配置文件
    每个用户也需要配置文件,进入需要使用nbgrader用户的根目录,自己建立一个文件名为nbgrader_config.py,然后进入写上一步的代码。
  2. 关掉学生不需要的插件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

这里的思想是,老师与学生的区别就在能不能使用发作业、收作业的功能。
教师端:
箭头所指为发布作业的插件
在这里插入图片描述
学生端:
只有接受作业和交作业的插件
在这里插入图片描述

  1. 多个课程怎么办
    其实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编程作业所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部