Python 从子文件夹导入模块

12

我正在尝试对每个学生单独存放的python提交进行评分。为此,我需要运行一个名为f()的函数。如果我当前的路径与文件所在的路径相同,我可以简单地执行以下操作:

import filename
filename.f()

然而,是否有更好的方法呢?例如,假设目录结构如下:
main.py
student/run_this.py

我知道如果学生文件夹中有一个“__init__.py”文件,我只需要键入
import student.run_this

然而,没有那个文件,它就无法工作。

我发现了一些类似的问题:

但是这些问题都没有给出特别令人满意的答案。


那么,你对 __init__.py 文件到底有什么问题? - eazar001
1
你需要将 student 文件夹添加到你的路径中,然后导入 run_this。这就是其他答案告诉你要做的,你尝试过什么没有成功吗? - Martijn Pieters
1
并不是说它没有起作用,而是它看起来不够优雅。或者至少,添加_init_.py似乎对我来说相当令人反感——修改文件结构以访问子文件夹似乎是不道德的。关于更改路径,我读到过这是不好的做法,但它似乎是一个合理的解决方案。 - Viknesh
1个回答

11
在文件夹student中创建一个__init__.py模块,其中应包含以下内容。
from . import *

您可以通过以下方式从“student”文件夹中调用其父文件夹的模块:
import student.module.py

如果您发布任何其他错误,我们可以提供进一步的帮助。

1
你认为你能解释一下(或给我提供相关资料)为什么需要 init.py 文件吗?那样做最终确实起作用了,但是我有点困惑设计逻辑是什么。 - Viknesh
__init__.py 就像 C++ 或 Python 中的类继承逻辑一样简单。当 Python 查看一个文件夹时,它不会包含其中所有可用的模块。如果您在 __init__ 函数中指定了 Python 进入类时要执行的函数,则它会理解得很好。在这里,我们只是在 Python 遇到一个文件夹时导入必要或所有模块。 - Mathan Kumar
这个答案是我能找到的唯一一个来回答我遇到的问题,谢谢@MathanKumar! - George Willcox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接