从嵌套文件夹导入模块

时间:2016-02-08 10:58:10

标签: python python-2.7 import

我有像这样的文件夹结构

main_folder
|
|--done
|  |
|  |--test1
|  |--__init__.py
|
|---check.py

__ INIT __ PY:

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

check.py:

from done.test1 import Tries
Tries()

错误:

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

ImportError: No module named done.test1 

我无法从嵌套文件夹导入模块。有没有办法做到这一点。

修改

在Salva的回答之后,我改变了我的结构

.
├── check.py
|--__init__.py(no content)
└── done
    ├── __init__.py(no content)
    └── test1
        └── __init__.py <-- this files contains your Tries class

现在也抛出相同的错误。

3 个答案:

答案 0 :(得分:1)

您希望将每个目录中的文件__init__.py视为一个包,因此您需要在两个目录中使用它:

.
├── check.py
└── done
    ├── __init__.py
    └── test1
        └── __init__.py <-- this files contains your Tries class

答案 1 :(得分:1)

在以下文件/文件夹结构中,您的代码只适用于此处:

.
├── check.py
└── done
    └── test1.py

当我运行check.py时,它会打印Test。我没有使用__init__.py。你所描述的__init__.py我做了test1.py。

答案 2 :(得分:1)

首先尝试导入包done

import done

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

从日志中看起来你似乎在使用IPython,在这种情况下尝试将你的文件夹添加为模块路径

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