问题描述
我想将子文件夹导入为模块。因此,每个子文件夹都包含 __ 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
这篇关于从子文件夹导入模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!