从子文件夹导入模块

发布于 2021-01-29 15:08:36

我想将子文件夹导入为模块。因此,每个子文件夹都包含一个__init__.py。我的文件夹结构是这样的:

src\
  main.py
  dirFoo\
    __init__.py
    foofactory.py
    dirFoo1\
      __init__.py
      foo1.py
    dirFoo2\
      __init__.py
      foo2.py

在我的主脚本中,我导入

from dirFoo.foofactory import FooFactory

在此工厂文件中,我包括以下子模块:

from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2

如果我调用我的foofactory会收到错误消息,则该python无法导入子模块foo1和foo2:

Traceback (most recent call last):
  File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
  File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in    <module>
from dirFoo1.foo1 import Foo1
    ImportError: No module named dirFoo1.foo1
关注者
0
被浏览
59
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    无需与您PYTHONPATHsys.path此处混淆。

    为了在包中正确使用绝对导入,您还应该包括“ root”包名,例如:

    from dirFoo.dirFoo1.foo1 import Foo1
    from dirFoo.dirFoo2.foo2 import Foo2
    

    或者您可以使用相对导入

    from .dirfoo1.foo1 import Foo1
    from .dirfoo2.foo2 import Foo2
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看