本文介绍了从子文件夹导入模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将子文件夹导入为模块。因此,每个子文件夹都包含 __ init __。py 。我的文件夹结构如下:

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

在我的主脚本中我导入

 来自dirFoo.foofactory import FooFactory 

在此工厂文件我包括子模块:

 来自dirFoo1.foo1 import foo1 
来自dirFoo2.foo2 import Foo2

如果我调用我的foofactory我得到错误,python无法导入子模块foo1和foo2:

  Traceback(最近一次调用最后一次):
文件/Users/tmp/src/main.py,行1,在< module>中来自dirFoo.foofactory的
导入FooFactory
文件/Users/tmp/src/dirFoo/foofactory.py,第1行,< module>来自dirFoo1.foo1的
导入Foo1
ImportError:没有名为dirFoo1.foo1的模块


解决方案

这里没有必要弄乱你的 PYTHONPATH sys.path 这里。



要在包中正确使用绝对导入,您还应该包含root包名,例如:



从dirFoo.dirFoo2.foo2导入Foo1
导入Foo2

或者您可以使用:

 来自.dirfoo1.foo1 import Foo1 
from .dirfoo1.foo1 import Foo2


I want to import subfolders as modules. Therefore every subfolder contains a __init__.py. My folder structure is like this:

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

In my main script I import

from dirFoo.foofactory import FooFactory

In this factory file I include the sub modules:

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

If I call my foofactory I get the error, that python can't import the submodules foo1 and 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
解决方案

There's no need to mess with your PYTHONPATH or sys.path here.

To properly use absolute imports in a package you should include the "root" packagename as well, e.g.:

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

Or you can use relative imports:

from .dirfoo1.foo1 import Foo1
from .dirfoo1.foo1 import Foo2

这篇关于从子文件夹导入模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 03:32