Python导入库:importlib.import_模块可以成功地将python模块导入pythonshell,但在以scrip形式运行时无法导入文件

2024-10-04 01:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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和{},下面是这两个文件的代码。在

^{pr2}$
#!/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'

请给我一些建议,为什么这不起作用,当我导入它作为一个内部包模块,任何输入将不胜感激。在


Tags: 模块文件inpyimportsrc目录init