【问题标题】:Python imports from subfolders从子文件夹导入 Python
【发布时间】:2013-02-19 19:14:24
【问题描述】:

我正在尝试为每个学生在不同文件夹中的一些 python 提交评分。为此,有一个函数,比如我要运行的 f()。我知道如果我当前的路径与文件所在的路径相同,我可以简单地做

import filename
filename.f()

但是,还有更好的方法吗?例如,假设目录结构如下:

main.py
student/run_this.py

我知道如果学生文件夹中有“__init__.py”文件,我可以直接输入

import student.run_this

但是,没有该文件,它就无法工作。

我发现的一些类似问题是

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

【问题讨论】:

  • 那么__init__.py 文件到底有什么问题?
  • 您将student 文件夹添加到您的路径,然后导入run_this。这就是其他答案告诉您要做的事情,您尝试了什么不起作用?
  • 这并不是说它没有那么好用,因为它看起来并不优雅。或者至少,添加 _init_.py 对我来说似乎很令人反感 - 修改文件结构以访问子文件夹似乎是不道德的。对于改变路径,我读到这是不好的做法,但它似乎是一个合理的解决方案。

标签: python python-3.x python-import


【解决方案1】:

在文件夹student 中创建一个__init__.py 模块,该模块应包含

from . import *

然后您可以将学生文件夹中的任何模块称为其父文件夹模块

import student.module.py

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

【讨论】:

  • 你认为你可以解释(或将我链接到材料)解释为什么需要 _init_.py 的吗?这确实奏效了,但我对设计逻辑有点困惑
  • __init__.py 与 c++ 或 python 中的类继承逻辑一样简单。当 python 查看一个文件夹时,它不包括其中的所有可用模块。如果你在 __init__ 函数中指定 python 进入类时要执行的函数,它很好理解。这里我们只是在python遇到使用__init__的文件夹时导入必要的或所有模块。
  • 这个答案是我能找到的唯一一个可以回答我遇到的问题的答案,谢谢@MathanKumar!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 2018-08-19
  • 2023-02-02
  • 2013-01-18
  • 2010-10-02
  • 2013-07-12
  • 2014-03-29
相关资源
最近更新 更多