TL;DR:在模块文件夹ModuleFolder
的__init__.py
文件中,我添加一些代码来动态导入目录中的其他python文件,当我在pythonshell中执行import ModuleFolder
操作时,它会产生一个ModuleNotFound
异常。为什么?在
背景
所以我是大学里两个部分Python课程的助教,我需要每周给100个学生的Python作业评分。如果我手工做,因为需求是固定的-我可以自动化这些无聊的东西。在
但我目前在使用importlib.import_module
导入学生作业提交作为模块时遇到了一些困难。在
我把我的评分脚本组织成一个Python包,文件结构如下:
GRADINGSCRIPTS/
| - README.md
| - venv/
| - src/
| - __init__.py
| - HW01/
| - HW02/
| - __init__.py
| - __main__.py # this file is what I will execute from command line
| - grading_script.py
| - submissions/
| - __init__.py # this file has some code in it
| - student_submission_0.py
| - student_submission_1.py
| ...
如您所见,我将所有源代码放在src/
目录下,并将其视为一个python包。文件夹HW0*/
是以周分隔的作业目录。每个HW0*/
目录的文件结构都是相同的-一个__init__.py
将文件夹标记为package,运行python3 -m HW0*
时要执行的__main__.py
文件,grading_script.py
对于我的测试案例,submissions/
目录是我从学校课程系统下载的目录,其中包含学生提交的所有材料,__init__.py
文件是我手动添加的。在
一些主要代码
我相信有两个代码文件与我的问题有关。HW02/__main__.py
和{
#!/usr/bin/env python3
""" HW02 Grading: executing grading script here"""
from . import submissions
# import grading_script
for homework in submissions.SUBMITTED_HOMEWORK:
print(dir(homework))
我被困在这里:
当我在目录GRADINGSCRIPT/
下的Python interactive shell中时,我尝试import src.HW02.submissions
它已经成功执行,并且我能够使用导入的students模块中的函数/类。在
{19>在接收以下python模块时,请尝试运行该模块:
someone@AMacBookPro | SSW810GradingScript | master via GradingScript
» python3 -m src.HW02
Current absolute path: /Users/benjamin/Documents/Python_Scripts/SSW810GradingScript/src/HW02/submissions
__file__: /Users/benjamin/Documents/Python_Scripts/SSW810GradingScript/src/HW02/submissions/__init__.py | __name__: src.HW02.submissions | __package__: src.HW02.submissions
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/Users/benjamin/Documents/Python_Scripts/SSW810GradingScript/src/HW02/__main__.py", line 4, in <module>
from . import submissions
File "/Users/benjamin/Documents/Python_Scripts/SSW810GradingScript/src/HW02/submissions/__init__.py", line 24, in <module>
SUBMITTED_HOMEWORK = import_python_files()
File "/Users/benjamin/Documents/Python_Scripts/SSW810GradingScript/src/HW02/submissions/__init__.py", line 20, in import_python_files
imported_modules.append(importlib.import_module(file_name[:-3]))
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named 'HW02_YinghuiCai'
请给我一些建议,为什么这不起作用,当我导入它作为一个内部包模块,任何输入将不胜感激。在
目前没有回答
相关问题 更多 >
编程相关推荐