QDU-OJ python升级后不能正确编译的问题
排错情况
按图中取消注释,发现由于版本原因引起找不到文件,文件名称被写死了,代码参见入下:
https://github.com/QingdaoU/JudgeServer/blob/master/client/Python/languages.py
py3_lang_config = {
"compile": {
"src_name": "solution.py",
"exe_name": "__pycache__/solution.cpython-36.pyc",
"max_cpu_time": 3000,
"max_real_time": 5000,
"max_memory": 128 * 1024 * 1024,
"compile_command": "/usr/bin/python3 -m py_compile {src_path}",
},
"run": {
"command": "/usr/bin/python3 {exe_path}",
"seccomp_rule": "general",
"env": ["PYTHONIOENCODING=UTF-8"] + default_env
}
}
错误截图
如何解决(修改编译选项)
docker exec -it oj-backend sh
python3 manage.py shell
from options.options import *
print(SysOptions.languages)
这是系统使用的语言和编译器信息和编译选项,是 judge/languages.py 的拷贝(参见judgerServer),如果只修改 py 文件,是不会生效的。需要运行
SysOptions.reset_languages()
更新数据库。
这样以后系统更新了,py 文件可能会被覆盖,但是数据库的值还是修改过的。所以还请自行备份修改过的配置。
个人操作:原本尝试修改SysOptions.languages其中的python3描述部分,发现并没有起作用,随后运行SysOptions.reset_languages(),再次查看其中内容,发现少了python2,python3的部分内容已有变化,这里我还不是不太清楚,估计是reset才有效,并且自动进行了搜索语言.
python3编译对比
- 原先的了
{'name': 'Python3',
'config':
{'run':
{'env': ['LANG=en_US.UTF-8', 'LANGUAGE=en_US:en', 'LC_ALL=en_US.UTF-8', 'PYTHONIOENCODING=utf-8'],
'command': '/usr/bin/python3 {exe_path}',
'seccomp_rule': 'general'},
'compile': {'exe_name': '__pycache__/solution.cpython-36.pyc',
'src_name': 'solution.py',
'max_memory': 134217728,
'max_cpu_time': 3000,
'max_real_time': 10000,
'compile_command': '/usr/bin/python3 -m py_compile {src_path}'},
'template': '//PREPEND BEGIN\n//PREPEND END\n\n//TEMPLATE BEGIN\n//TEMPLATE END\n\n//APPEND BEGIN\n//APPEND END'},
'description': 'Python 3.6',
'content_type': 'text/x-python'}
- 最新的
{'name': 'Python3',
'config':
{'run':
{'env': ['LANG=en_US.UTF-8', 'LANGUAGE=en_US:en', 'LC_ALL=en_US.UTF-8'],
'command': '/usr/bin/python3 -BS {exe_path}',
'seccomp_rule': 'general'},
'compile': {'exe_name': 'solution.py',
'src_name': 'solution.py',
'max_memory': 134217728,
'max_cpu_time': 3000,
'max_real_time': 10000,
'compile_command': '/usr/bin/python3 -m py_compile {src_path}'},
'template': '//PREPEND BEGIN\n//PREPEND END\n\n//TEMPLATE BEGIN\ndef add(a, b):\n # code\n\n//TEMPLATE END\n\n//APPEND BEGIN\nprint(add(1, 2))\n//APPEND END'},
'description': 'Python 3.12', 'content_type': 'text/x-python'}