ImportError:没有模块命名为<parent dir>

Bee*_*ars 12 python directory syntax code-reuse python-2.7

我正在尝试通过Python学习编程,所以如果这是一个荒谬简单的问题,我会提前道歉.

我试图简化我复杂的目录结构并利用Python的一些代码重用功能,我遇到了一个对我来说无法解释的ImportError错误.在过去的几个小时里,我一直在阅读有关Python的import,modulepackage功能(在这里,这里,这里,并在这里等等),但我仍然无法解决这个(貌似)简单的错误.

这是问题所在.

我有一个目录(dir),其中有一个子目录(subdir).每个目录包含几个文件.因此,我的整体目录结构如下所示:

dir/
    __init__.py
    draw_lib.py
    subdir/
        __init___.py
        drawing.py
Run Code Online (Sandbox Code Playgroud)

在我的drawing.py文件中,我尝试draw_lib.py使用以下行导入:from dir import daw_lib.py.它导致了ImportError: No module named dir.任何人都可以快速解释为什么我的drawing.py文件找不到我的dir目录?谢谢你的帮助.我完全迷失了,并希望一劳永逸地改进我的代码重用和目录结构.

cpb*_*pb2 7

您最初正在执行draw_lib.py。所以“根目录”在整个程序中都是/

然后,当你在drawing.py 中尝试' from dir import draw_lib.py ' 时它不会工作,因为根目录仍然是/而不是dir/

import draw_lib
Run Code Online (Sandbox Code Playgroud)

将在 drawing.py 中

例子:

/
    __init__.py
    main.py
    test/
        __init___.py
        case.py
Run Code Online (Sandbox Code Playgroud)

main.py 中,输入:

import test.case

print 'main.py'

if __name__ == "__main__":
        test.case.test()
Run Code Online (Sandbox Code Playgroud)

test/case.py 中,输入:

import main

def test():
        print 'case.py'
Run Code Online (Sandbox Code Playgroud)

我的输出:

main.py
main.py
case.py
Run Code Online (Sandbox Code Playgroud)

如您所见,我从嵌套文件中导入了main.py。你会看到main.py两次。当您在case.py 中导入它时,第二次初始启动一次。

  • 不,没有办法做你最初想做的事。从设计的角度来看,这样做没有意义。导入“外部”模块的唯一两种方法是它是否可以在根目录中定位,或者它是否作为模块安装到 Python 的模块目录 (/usr/lib/python2.7/) 中。我从来不需要从第二个嵌套的 Python 文件中导入“主”Python 文件。它使事情复杂化。您的“主要”应该导入模块并使用它们,而不是相反:) (2认同)