apluslms/grade-python本镜像为特定Python版本的程序作业自动评分环境,旨在提供标准化的评分运行时。镜像集成了路径中的指定Python版本,并预装核心评分工具(python-grader-utils、pytest),支持多种扩展场景的依赖库,适用于各类Python程序作业的自动化评分流程。
math-*、ml-*),按需集成扩展库(如科学计算、机器学习、数据库等)。graderutils、unittest系列、run-all-unittests等命令,简化评分流程配置。capture、testcase包装器)。镜像标签遵循<Python版本>-<评分基础版本>格式,其中:
<Python版本>:镜像内置的Python版本(如3.5、3.7)。<评分基础版本>:底层grading-base镜像版本(如2.0、3.1)。uN(N为递增数字),表示在软件版本不变的情况下的镜像更新(如3.5-2.0u1表示Python 3.5、评分基础2.0的第1次更新)。较新版本标签包含python-grader-utils版本,格式为<Python版本>-<grader-utils版本>-<评分基础版本>(如3.7-3.3-3.1表示Python 3.7、grader-utils 3.3、评分基础3.1)。
除基础标签外,提供以下功能扩展标签(前缀+基础标签格式,如math-3.9-3.5-4.0):
| 标签前缀 | 包含扩展包 | 用途 |
|---|---|---|
math-* | matplotlib、scipy、numpy、bokeh(科学计算与可视化);openpyxl、xlrd、xlwt(Excel解析) | 科学计算、数据可视化及Excel处理相关作业 |
ml-* | 在math-*基础上增加pandas、scikit-learn | 机器学习、数据分析相关作业 |
jupyter-* | 在ml-*基础上增加nbconvert、ipython | Jupyter笔记本作业评分 |
rdf-* | rdflib | RDF数据处理相关作业 |
xls-* | xlrd、xlwt | 仅需基础Excel文件解析的作业 |
ply-* | PLY(解析器与词法分析器生成器) | 语法解析相关作业 |
smt-* | 在ply-*基础上增加pysmt、dd | SMT求解与决策图相关作业 |
y2-* | pyqt6、coverage、networkx、pyvirtualdisplay | 《基础编程课程Y2》专用 |
mec-* | 在math-*基础上增加requests、bs4、validators | 《机电机器设计课程》专用 |
psql-* | PostgreSQL服务器、psycopg2 | 需要PostgreSQL数据库交互的作业 |
comp-* | requests、bs4、pandas、lxml、html5lib | 竞赛编程课程作业 |
本镜像适用于各类Python程序作业的自动化评分场景,尤其适合教育机构、在线编程平台等需要标准化评分环境的场景。具体适用范围包括:
3.9-4.0),通过graderutils或unittest进行代码评分。math-*标签,支持NumPy、SciPy等库的作业评分。ml-*标签,满足pandas、scikit-learn依赖的评分需求。y2-*、mec-*等专用标签,适配课程定制化依赖。psql-*标签,支持PostgreSQL交互代码的评分。镜像提供以下核心实用命令,用于简化评分流程配置:
graderutils功能:执行python-grader-utils评分工具,支持多种参数配置。
语法:
bashgraderutils [--use-iotester] [--use-rpyc] [--novalidate] [--container] [--show-config] [--develop-mode] [--exercise-path <绝对路径>] -- [<测试配置绝对路径>]
参数说明:
--use-iotester:创建iotester所需的目录结构及权限。--use-rpyc:通过RPyC(远程Python调用)在独立进程中导入并执行学生代码。--novalidate:跳过测试配置文件的验证。--container:在基于grading-base的容器中运行时,将graderutils自身异常输出到stderr(通常不使用)。--show-config:将测试配置打印为警告信息。--develop-mode:显示所有未处理异常(无格式化),并隐含--show-config;默认情况下,测试配置错误会被通用错误信息掩盖,以避免泄露评分细节。--exercise-path <绝对路径>:指定评分测试运行目录(默认/exercise;个性化作业可设为/personalized_exercise)。说明:
grading-base的capture包装器执行graderutils.main(使用--use-rpyc时执行graderutils.__main__)。--use-iotester、--use-rpyc、--exercise-path外,其他参数均传递给Python模块。/exercise/test_config.yaml作为测试配置文件(即配置文件为test_config.yaml时,仅需执行graderutils)。unittest功能:python3 -m unittest的别名,自动将/exercise添加到PYTHONPATH。
语法:
bashunittest [unittest参数]
unittest-capture功能:基于capture包装器的unittest执行命令,自动将/exercise添加到PYTHONPATH;无错误时自动执行err-to-out(错误输出重定向到标准输出)。
语法:
bashunittest-capture [unittest参数]
unittest-testcase功能:结合testcase(来自grading-base)和unittest的包装命令,自动将/exercise添加到PYTHONPATH。
语法:
bashunittest-testcase [-t 标题] [-p 分数] [-s 跳过条件] [unittest参数]
参数:
-t:测试标题。-p:测试分数。-s:跳过条件。unittest。grading-base的testcase文档。python-compile-all功能:python3 -m compileall的别名,用于验证提交文件的Python语法。
语法:
bashpython-compile-all [compileall参数]
run-all-unittests功能:一站式评分命令,可替代简单场景下的run.sh。
语法:
bashrun-all-unittests [-S] [-p 每个测试类分数]
流程:
-S跳过);若语法错误,终止测试。*test*.py的文件。unittest.TestCase的类,通过testcase和unittest执行测试。-S:跳过语法验证。-p:每个测试类通过时的分数(默认按配置)。graderutils)挂载练习目录(含test_config.yaml),执行基础评分:
bashdocker run --rm -v /本地练习目录:/exercise apluslms/python-grading:3.9-3.5-4.0 graderutils
run-all-unittests)对提交作业执行全流程测试(语法验证+单元测试):
bashdocker run --rm -v /本地提交目录:/submission -v /本地练习目录:/exercise apluslms/python-grading:3.9-3.5-4.0 run-all-unittests -p 5
(-p 5表示每个测试类满分5分)
math-*标签)运行需要NumPy和Excel解析的作业评分:
bashdocker run --rm -v /本地练习目录:/exercise apluslms/python-grading:math-3.9-3.5-4.0 graderutils --exercise-path /personalized_exercise





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务