Python:从多个子文件夹导入时找不到模块

时间:2021-06-20 11:25:15

标签: python django python-import importerror

我的文件夹结构如下(附图)

Folder_structure

在 Main.py 中,我导入了所有文件夹。现在 Main.py 调用位于项目 1 中的 subMain.py。 subMain.py 导入 spark、common 等。现在 utils.py 有 helper.py 中的函数,因此需要导入 helper.py

这会引发模块导入错误,即“No module named Common”

我尝试将 init.py 放在所有文件夹中,但是没有运气。有人可以帮忙吗?提前致谢。

2 个答案:

答案 0 :(得分:0)

看起来您想要做的是从 helper.py 相对导入 utils.py 具有以下目录结构

.
├── main.py
└── project
    ├── __init__.py
    ├── common
    │   ├── __init__.py
    │   ├── helper.py
    │   └── queries.py
    ├── spark
    │   ├── __init__.py
    │   └── utils.py
    └── submain.py

在您的 utils.py 中,您应该能够使用 from ..common import helper

要了解有关相对导入的更多信息,请参阅 this 文章和 this SO 问题。 我正在使用 python 3.6

答案 1 :(得分:0)

我猜多个子文件夹是指嵌套的子文件夹。

有多种方法,具体取决于您是要创建 pip 可安装库(不一定通过 pypi 可用),还是要将一堆文件捆绑在一起。

请查看github上现有python项目的结构,并尝试重现它。注意添加 __init__.py 文件的位置,并查看 setup.py 下是否有。

如果您不想创建 pip 可安装库(不存在 setup.py 文件),则此存储库 https://github.com/beurtschipper/Depix 可以作为示例。

否则,如果您想创建一个库(存在 setup.py 文件),这个 https://github.com/nipy/nilabels 会有所帮助。

如果没有 __init__.py 并且从 python 版本 > 3,您可以通过相对导入访问 python 文件,但不鼓励使用此解决方案,因为用户可能会开始从不同的文件夹(不一定是您所在的文件夹)运行代码有 main.py,打破相对路径)。

另一种方法是使用 pythonpath(但这不是我推荐的解决方案。如果您有多个项目,它会变得非常繁忙,或者您可能需要在模块级别进行 hack 以编程方式将相对路径添加到 python 路径)

https://docs.python.org/3/using/cmdline.html#environment-variables

Importing from a relative path in Python

相关问题