我想从子文件夹中的文件调用函数。我宁愿静态地做。我使用空__init__.py
文件,因为我读过它们在简单的情况下可以是空的(我的情况再简单不过了),或者从3.5开始我根本不需要它们。但我愿意填补他们。
我具有以下文件结构:
test
├── callfoo.py (main)
├── __init__.py (empty)
└── folder
├── submodule.py
└── __init__.py (empty)
callfoo.py:
#import statement wanted
def main():
foo()
if __name__ == "__main__":
main()
submodule.py
def foo():
print('foo')
对于导入语句,我尝试过:
import test.folder.submodule
from test.folder import submodule
from test.folder.submodule import foo
每个导致ModuleNotFoundError: No module named 'test.folder'
我在这里有点困惑,因为它们直接来自文档
import .folder.submodule
-> invalid syntax
importlib.import_module('test.folder.submodule')
ModuleNotFoundError:没有名为“ test.folder”的模块
这有效:
import importlib.util
spec = importlib.util.spec_from_file_location("submodule", "/home/.../test/folder/submodule.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
但是我真的不想动态地做到这一点,尤其是对于多个文件。
此ModuleNotFoundError:就我所知,没有名为x的模块处理我的错误消息,但不处理子文件夹(submodule.py
在与相同的级别上,它对我来说很好用callfoo.py
)
有几个问题涉及子文件夹的导入,但是我无法让它们为我工作。我希望提供一个简单的问题提法。
假设我们具有以下文件夹/文件架构:
test
├── callfoo.py
└── folder
├── __init__.py
└── submodule.py
1 directory, 3 files
callfoo.py:
from folder.submodule import foo
def main():
foo()
if __name__ == '__main__':
main()
submodule.py:
def foo():
print('foo in submodule')
现在将您自己放置在同一级别的文件夹中callfoo.py
并运行:
$ python3 callfoo.py
输出:
> foo in submodule
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句