ImportError:没有名为<父目录>的模块

18 投票
2 回答
15239 浏览
提问于 2025-04-18 09:11

我正在通过学习Python来掌握编程,所以如果这个问题太简单,我先说声抱歉。

我想简化我复杂的文件夹结构,并利用Python的一些代码重用功能,但我遇到了一个对我来说难以理解的ImportError错误。这几小时我一直在阅读关于Python的importmodulepackage的资料(比如这里这里这里这里等),但我还是无法解决这个(看起来)简单的错误。

问题是这样的。

我有一个文件夹(dir),里面有一个子文件夹(subdir)。每个文件夹里都有一些文件。所以,我的整体文件夹结构看起来是这样的:

dir/
    __init__.py
    draw_lib.py
    subdir/
        __init___.py
        drawing.py

在我的drawing.py文件中,我尝试用以下代码导入draw_lib.pyfrom dir import draw_lib.py。结果出现了ImportError: No module named dir。有没有人能简单解释一下,为什么我的drawing.py文件找不到dir这个文件夹?非常感谢任何帮助。我完全搞不清楚,真的很想一次性改善我的代码重用和文件夹结构。

2 个回答

-1

如果需要参考,可以查看这个链接,

https://askubuntu.com/a/1163934/1748542

只需要把链接中提到的代码行添加到根目录下的 main.pyxyz.py 或者其他类似的文件中就可以了。

这样应该就能顺利运行了。

比如:

parentdir
  |
  __init__.py
  main.py
  |
  subdir
    |
    __init__.py
    a.py

main.py

import os, sys

#Following lines are for assigning parent directory dynamically.

dir_path = os.path.dirname(os.path.realpath(__file__))

parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))

sys.path.insert(0, parent_dir_path)

from parentdir.subdir import a

完成了,你的问题解决了。

8

你最开始运行的是 draw_lib.py。所以在整个程序中,'根目录'就是 /

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

import draw_lib

drawing.py 中会成功。

示例:

/
    __init__.py
    main.py
    test/
        __init___.py
        case.py

main.py 中,放入这个:

import test.case

print 'main.py'

if __name__ == "__main__":
        test.case.test()

test/case.py 中,放入这个:

import main

def test():
        print 'case.py'

我的输出:

main.py
main.py
case.py

正如你所看到的,我从一个嵌套的文件中导入了 main.py。你会看到 main.py 出现了两次。第一次是程序启动时,第二次是在 case.py 中导入时。

撰写回答