ImportError: No Module Named <parent dir>
我正试图通过python学习编程,所以如果这是一个非常简单的问题,我提前道歉。
我试图简化我复杂的目录结构,利用一些Python的代码重用特性,我遇到了一个难以解释的ImportError错误。在过去的几个小时里,我一直在阅读关于python的import、module和package功能(这里、这里、这里和这里等),但我仍然无法解决这个(似乎)简单的错误。
这就是问题所在。
我有一个目录(dir),其中驻留一个子目录(subdir)。每个目录都包含一些文件。因此,我的整体目录结构如下:
1 2 3 4 5 6
| dir/
__init__.py
draw_lib.py
subdir/
__init___.py
drawing.py |
在我的drawing.py文件中,我试图用以下行导入draw_lib.py:from dir import daw_lib.py。它产生一个ImportError: No module named dir。有人能快速解释为什么我的drawing.py文件找不到我的dir目录吗?谢谢你的帮助。我完全迷路了,我真的很想一次性地改进我的代码重用和目录结构。
您开始执行draw-lib.py。所以"根目录"是/贯穿整个程序。
然后,当您在drawing.py中尝试"from dir import draw_lib.py"时,它将无法工作,因为根目录仍然是/而不是dir/。
将在drawing.py中工作。
例子:
1 2 3 4 5 6
| /
__init__.py
main.py
test/
__init___.py
case.py |
号
在main.py中,输入:
1 2 3 4 5 6
| import test.case
print 'main.py'
if __name__ =="__main__":
test.case.test() |
在test/case.py中,输入:
1 2 3 4
| import main
def test():
print 'case.py' |
。
我的输出:
1 2 3
| main.py
main.py
case.py |
如您所见,我从嵌套文件导入了main.py。你会看到两次main.py。第一次用于初始启动,第二次导入case.py时使用。
- 试过了。当我导入draw_lib时,我得到相同的错误:ImportError: No module named draw_lib。会不会这么简单:)
- 在这里工作。我在答案中添加了一个例子:)
- 它对我不起作用。我一个字一个字地跟着它。有什么建议吗?会不会是个怪胎?(不管怎样,谢谢你的帮助。这些莫名其妙、长达数小时、看似简单的错误可能会让人沮丧,因此,作为一个刚刚学习的人,我真的很欣赏SO和其他Python社区。)
- 您是如何执行脚本的?你和main.py在同一个目录中吗?这是什么操作系统?别担心,我们都经历过编程时间,似乎一切都失败了。
- Windows操作系统。我正在从test/目录中的命令行执行脚本。
- 您应该在根目录中。然后执行"python main.py"。
- 好吧,太棒了。当我这样做的时候,它是可以工作的,但是只能从子目录(即目录树)导入,还是有一种方法可以做我想做的?另外,非常感谢你的帮助。我接受你的回答。
- 不,没有办法做你原来想做的事。从设计的角度来看,这样做毫无意义。导入"foreign"模块的唯一两种方法是,将其可定位在根目录中,或者将其作为模块安装到python的模块目录中(/usr/lib/python2.7/)。我从来没有必要从第二个嵌套的python文件导入"main"python文件。它使事情复杂化。您的"main"应该导入模块并使用它们,而不是相反的方法:)
- 很好。谢谢你,CPB2!