关于python:从嵌套文件夹导入模块

Importing modules from nested folder

本问题已经有最佳答案,请猛点这里访问。

我有这样的文件夹结构

1
2
3
4
5
6
7
8
main_folder
|
|--done
|  |
|  |--test1
|  |--__init__.py
|
|---check.py

P.

1
2
3
class Tries(object):
    def __init__(self):
        print"Test"

检查:PY:

1
2
from done.test1 import Tries
Tries()

错误:

1
2
3
4
5
6
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-8-10953298e1df> in <module>()
----> 1 from done.test1 import Tries

ImportError: No module named done.test1

我无法从嵌套文件夹导入模块。有什么办法可以做到这一点吗?

编辑:

在萨尔瓦的回答之后,我像这样改变了我的结构

1
2
3
4
5
6
7
.
├── check.py
|--__init__.py(no content)
└── done
    ├── __init__.py(no content)
    └── test1
        └── __init__.py <-- this files contains your Tries class

同样的错误现在也被抛出。


先尝试导入包done

1
import done

如果它不起作用,可能是您运行的脚本来自不同于您指定的文件夹(在本例中是main_folder)

从日志来看,您似乎正在使用ipython,在这种情况下,请尝试将文件夹作为模块路径添加。

1
2
3
import sys
sys.path.append('path/to/your/main_folder')
import done

在以下文件/文件夹结构中,您的代码仅在此处工作:

1
2
3
4
.
├── check.py
└── done
    └── test1.py

当我运行check.py时,它打印测试。但我没有使用初始化。你所说的"初始"是我做的test1.py。


您需要在每个目录中都有一个文件__init__.py,您希望它被视为一个包,因此您需要在两个目录中都有该文件:

1
2
3
4
5
6
.
├── check.py
└── done
    ├── __init__.py
    └── test1
        └── __init__.py <-- this files contains your Tries class